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的作用是什么
网友评论