美文网首页
面试题(一)

面试题(一)

作者: 马小跳_ | 来源:发表于2018-02-17 21:02 被阅读232次

1.如何实现对python列表去重并保持原先顺序?

l = [3, 3, 6, 7, 1, -1, -2, -1]

# 方式一
res = []
[res.append(x) for x in l if x not in res]
print(res)  # [3, 6, 7, 1, -1, -2]

2.现有两元组(('a',),('b',)),(('c',),('d',)),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'},]

t1 = (('a',), ('b',))
t2 = (('c',), ('d',))
print(t1,t2)

3.请给出二分查找的python示例代码

def search(num,l,start=None,end=None):
    start = start if start else 0
    end = end if end else len(l) - 1
    mid = (end - start)//2 + start
    if start > end:
        return None
    elif l[mid] > num :
        return search(num,l,start,mid-1)
    elif l[mid] < num:
        return search(num,l,mid+1,end)
    elif l[mid] == num:
        return mid
l = [1,2,3,4,4,3,2,1,34,4,5,6,54,4,6,7,67,878,6,567,45,64,345]
num = 878
print(search(num,l)) # 17

4.在python字符串格式化中,%和format的主要区别是什么?

python2.6之后新增了format,它通过{}和:来代替%。
有三种使用方式:
通过位置, '{0[0]},{0[1]}'.format(p)
通过关键字参数,'{name},{age}'.format(age=18,name='kzc') 
通过对象属性。'This guy is {self.name},is {self.age} old'.format(self=self)
填充与对齐:'{:>8}'.format('189')
精度与类型f:'{:.2f}'.format(321.33345)

5.*args**kwargs在什么情况下会使用到?请给出使用**kwargs的示例代码

当它们出现在实参位置时,作用是拆包;当它们出现在形参位置时,作用是收集参数。

def func(*args,**kwargs):
    print(args)  # (1, 2, 3)
    print(kwargs)  # {'a': 4, 'b': 5}

func(1,2,3,a=4,b=5)

6.写出下面代码的执行结果

x = "foo "
y = 2
print(x * y)  # foo foo 
# 字符串和运算符

7.写出下面代码的执行结果

kvps = {'1': 1, '2': 2}
theCopy = kvps
kvps['1'] = 5
sum  = kvps['1'] + theCopy['1']
print(sum)  # 10
# theCopy = kvps = {'1': 5, '2': 2}

8.选择题

sys.path.append('/root/mods')  # C

A.改变python的启动路径
B.改变python的工作路径
C.添加一个新的python模块的搜索路径
D.从mods中移除所有的文件夹

9.写出下面代码的执行结果

country_counter = {}
def addone(country):
    if country in country_counter:
        country_counter[country] += 1
    else:
        country_counter[country] = 1
addone('China')
addone('Japan')
addone('china')
print(len(country_counter))  # 3
print(country_counter)  #{'China': 1, 'Japan': 1, 'china': 1}

10.写出下面代码的执行结果

names1 = ['Amir', 'Barry', 'Chales', 'Dao']
names2 = names1
names3 = names1[:]
names2[0] = 'Alice'
names3[1] = 'Bob'
sum = 0
# names1 = names2 = ['Alice', 'Barry', 'Chales', 'Dao']
# names3 = ['Amir', 'Bob', 'Chales', 'Dao']
for ls in (names1, names2, names3):
    if ls[0] == 'Alice':
        sum += 1
    if ls[1] == 'Bob':
        sum += 10
print(sum)  # 12

11.写出下面代码的执行结果

d = lambda p: p * 2
t = lambda p: p * 3
x = 2
x = d(x)  # 4
x = t(x)  # 12
x = d(x)  # 24
print(x)  # 24

12.写出下面代码的执行结果

x = True
y = False
z = False
if x or y and z:  # and优先级高于or,结果为yes
    print('yes')
else:
    print('no')

13.python中如何实现tuple和list转换?

l = [1, 2, 3]
t = (1, 2, 3)

res = tuple(l)
print(res, type(res))  # (1, 2, 3) <class 'tuple'>

print((x for x in l))  # <generator object <genexpr> at 0x000001C629D86EB8>
print([x for x in t])  # [1, 2, 3]

14.请写出一段python代码实现删除list里面的重复元素

import random
data = [random.randint(1, 5) for x in range(10)]
print(data)

res1 = set(data)
print(res1)

res2 = []
[res2.append(x) for x in data if x not in res2]
print(res2)

res3 = list(set(data))
res3.sort(key=data.index)
print(res3)

15.如何得到列表list的交集与差集

l1 = [1, 2, 3]
l2 = [2, 3, 5]

print(set.intersection(set(l1), set(l2)))  # {2, 3}
print(set.difference(set(l1), set(l2)))  # {1}
print(set.difference(set(l2), set(l1)))  # {5}


print(set([x for x in l1 if x in l2]))  # {2, 3}
print(set([x for x in l1 if x not in l2]))  # {1}
print(set([x for x in l2 if x not in l1]))  # {5}

print(set(l1) & set(l2))  # {2, 3}
print(set(l1) - set(l2))  # {1}
print(set(l2) - set(l1))  # {5}

16.写出下面代码的执行结果

def extendList(val, list=[]):  # 可变数据类型的参数,操作的是同一个空列表
    list.append(val)
    return list

list1 = extendList(10)  # [10,]
list2 = extendList(123, [])  # [123, ]
list3 = extendList('a')  # [10, 'a']

print(list1)  # [10, 'a']
print(list2)  # [123, ]
print(list3)  # [10, 'a']

17.python中定义函数时如何书写可变参数和关键字参数?

# 位置参数>*args>默认参数>**kwargs
def func(a, *args, b=1, **kw):
    pass

18.什么是lambda表达式?

lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。冒号前是参数,冒号后是返回值。
lambda是一个表达式而不是一个语句。
lambda表达式可以出现在Python语法不允许def出现的地方。
lambda表达式返回一个值。

19.re的match()和search()有什么区别?

match()函数只检测RE是不是在string的开始位置匹配
search()会扫描整个string查找匹配,会扫描整个字符串并返回第一个成功的匹配
也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none

20.输出结果,为什么?

# python的短路原则

print(1 or 2)  # 1
print(1 and 2)  # 2
print(1 < (2 == 2))  # False  ==> 1 < True
print(1 < 2 == 2)  #  True ==》 (1<2) and (2==2)
print([i % 2 for i in range(10)])  # 列表解析式
print((i % 2 for i in range(10)))  # 生成器表达式

21.python2和python3有哪些显著的区别?

Python3对Unicode字符的原生支持
    python2中str默认为bytes,可以用u转换为unicode
    Python3中str默认为unicode

Python3采用的是绝对路径的方式进行import
    Python2中相对路径的import会导致标准库导入变得困难(想象一下,同一目录下有file.py,如何同时导入这个文件和标准库file)。Python3中这一点将被修改,如果还需要导入同一目录的文件必须使用绝对路径,否则只能使用相关导入的方式来进行导入。
    
Python2中存在老式类和新式类的区别,Python3统一采用新式类。

Python3使用更加严格的缩进。Python2的缩进机制中,1个tab和8个space是等价的

print语句被python3废弃,统一使用print函数
exec语句被python3废弃,统一使用exec函数
execfile语句被Python3废弃,推荐使用exec(open("./filename").read())
不相等操作符"<>"被Python3废弃,统一使用"!="
long整数类型被Python3废弃,统一使用int
xrange函数被Python3废弃,统一使用range,Python3中range的机制也进行修改并提高了大数据集生成效率
Python3中这些方法再不再返回list对象:dictionary关联的keys()、values()、items(),zip(),map(),filter(),但是可以通过list强行转换:
迭代器iterator的next()函数被Python3废弃,统一使用next(iterator)
raw_input函数被Python3废弃,统一使用input函数
字典变量的has_key函数被Python废弃,统一使用in关键词
file函数被Python3废弃,统一使用open来处理文件,可以通过io.IOBase检查文件类型
apply函数被Python3废弃
异常StandardError 被Python3废弃,统一使用Exception

22.请描述unicode,utf-8,gbk等编码之间的关系?

ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1bytes代表一个字符,

Unicode是为了统一世界各国语言的不用,统一用2个bytes代表一个字符,可以表达2**16=65556个,称为万国语言,特点:速度快,但浪费空间,

utf-8 为了改变Unicode的这种缺点,规定1个英文字符用1个字节表示,1个中文字符用3个字节表示,特点;节省空间,速度慢,用在硬盘数据传输,网络数据传输,相比硬盘和网络速度,体现不出来的,

gbk  是中文的字符编码,用2个字节代表一个字符,

23.请描述with的用法?如果自己的类需要支持with语句,应该如何书写?

24.python中如何一个对象是否可调用对象?哪些对象可以是可调用对象?如何定义一个类,使其对象本身就是可调用对象?

25.什么是装饰器?写一个装饰器,可以打印输出方法执行时长的信息。

26.什么是进程,线程,协程(纤程)?说一说python对它们的支持

27.def f(a, b=[])这种写法有什么陷阱?

可变数据类型作为默认参数

28.哪些情况下,y != x - (x - y)会成立?

# y != y
# javascript的NaN

29.用python实现“九九乘法表”(至少2种)

30.在数组中找到具有最大和的连续子数组(至少包含一个数字)

例如,给定数组[-2, 1, -3, 4, -1 , 1, 1, -5, 4 ]

连续子阵列[4, -1, 2, 1]具有最大的sum = 6

算法是指
A.数学的计算公式
B.程序设计语言的语句序列
C.对问题的精确描述
D.解决问题的精确步骤

32.写出下面代码的执行结果

type(1+2L*3.14)  # float

33.下述while循环执行的次数

k = 1000
while k > 1:
    print(k)
    k = k/2
    
# 1000介于2**9和2**10之间
# 执行次数为10次
以下何者是不合法的布尔表达式:B
A. x in range(6)
B. 3 = a
C. e > 5 and 4 == f
D. (x - 6) > 5
下列表达式的值为True的是:A
A. 5+4j > 2-3j
B. 3>2>2
C. (3,2) < ('a','b')
D.'abc' < 'xyz'
python不支持的数据类型有:A
A. char
B. int
C. float
D. list
关于python中的复数,下列说法错误的是:C
A. 表示复数的语法是real + image j
B. 实部和虚部都是浮点数
C. 虚部必须后缀j,且必须是小写
D. 方法conjugate返回复数的共轭复数

# 虚部的后缀可以是 “j” 或者 “J”
关于字符串下列说法错误的是:B
A. 字符应该视为长度为1的字符串
B. 字符串以\0标志字符串的结束
C. 既可以用单引号,也可以用双引号创建字符串
D. 在三引号字符串中可以包含换行回车等特殊字符
以下不能创建一个字典的语句是:C
A、dict1 = {}   
B、dict2 = { 3 : 5 }
C、dict3 = dict( [2 , 5] ,[ 3 , 4 ] ) 
D、dict4 = dict( ( [1,2],[3,4] ) )
下列Python语句正确的是: D
A、min = x  if  x < y  else  y
B、max = x > y ? x : y 
C、if (x > y) print x
D、while True : pass

41.如何在python中拷贝一个对象?并说明它们之间的区别。

42.谈谈你对装饰器的理解

43.python中match()和search()的区别

获取list的元素个数
向list末尾追加元素
判断dict有没有某个key的方法

45.切片

L = range(100)
取第一到第三个元素
取倒数第二个元素
取后十个元素
把L复制给L1使用(非引用传递)

46.如何判断一个变量是不是字符串?

s1 = 'abc'
type(s1)
isinstance(s1, str)

47.list和tuple有什么不同?

48.xrange和range有什么不同?

# '1,2,3'如何变成['1', '2', '3']
data = '1,2,3'
res = data.split(',')

# ['1', '2', '3']如何变成[1, 2, 3]
data = ['1', '2', '3']
res1 = [int(x) for x in data]
res2 = list(map(int, ss))
def func(a, b, c=0, *args, **kw):
    pass
    
# *args, **kw的作用是什么

相关文章

  • Android超实用最全面试大纲(三)

    文章目录: ANR面试题 OOM面试题 Bitmap面试题 UI卡顿面试题 内存泄漏面试题 内存管理面试题 一、A...

  • Android最全面试大纲(三)

    文章目录: ANR面试题 OOM面试题 Bitmap面试题 UI卡顿面试题 内存泄漏面试题 内存管理面试题 一、A...

  • 面试材料

    面试经验 面试题1 面试题2 面试题3 面试题4 面试题5 面试题6――数据结构 面试题7――网络 面试题8――汇...

  • 高阶面试题

    webpack面试题 面试题:webpack插件 Git面试题 面试题:git常用命令 面试题:解决冲突 面试题:...

  • this的指向的面试题

    面试题1 面试题2 面试题3 面试题4

  • 面试所涉及的问题

    面试题参考1 : 面试题 面试题参考2 : 内存管理 面试题参考3 :面试题 ...

  • 前端面试题2022年前端面试题

    一、HTML面试题 二、CSS面试题 三、JavaScript面试题 四、H5/C3面试题 五、ES6面试题 六、...

  • Java面试题汇总

    Java面试题总结 Java面试题总结一Java面试题总结二

  • Android面试题

    Android面试必备: (一)、Java面试题 (二)、Android面试题 (三)、Android高级面试题

  • 2022年web前端面试题

    web前端面试题分为:html/css面试题、javascript面试题、vue面试题、性能优化面试题、网络方面面...

网友评论

      本文标题:面试题(一)

      本文链接:https://www.haomeiwen.com/subject/wdkvtftx.html