记一次Python面试被问到的题
1
a={1:2,2:3} |
问:a的输出是什么?
答:{2:3}
2
b=[[]]*2; b[0].append(1); print(b) |
问:这四个b
的输出是什么?
答:
[[1], [1]] |
3
a="123"; b=a; b=b[:-1]; |
问:输出?
答:123 12
4
比较以下两段代码的执行效率和内存开销
res = 1 |
import itertools |
https://docs.python.org/3/library/itertools.html
答:首先第一个代码需要将两个列表和并为一个列表,而第二段代码是直接遍历两个列表,其次itertools.chain返回的是一个生成器,所以第二个代码的执行效率高,内存开销小。
5
What is the difference between tuple() and list[]?loop over tuple and list,which one is more effective?
if var in ["xxx", "yyy"]: |
Which one above is more efficitive? Note: The value after ‘in’ is a constant.
时间复杂度:tuple O(?) list O(?) set O(?)
答:tuple是不可变对象,list是可变对象。由于tuple不可变,所以申请内存为连续定长内存,而list类似于一个链表。
所以在loop中,tuple is more effective.
if var in {"xxx", "yyy"}
is more effective. 因为集合查询时间复杂度为O(1),tuple和list为O(N)
6
Python class中变量名和函数名前缀单下划线和双下划线(后缀没有下划线)分别是什么?For example,
class A: |
What’s the difference among the concepts protected, public, and private?
答:变量前没有下划线的为public
变量前有单下划线为protected,这种变量只能在本类或者其子类中调用(如果你想在其他地方调用也可以,但是会有警告)
变量前有双下划线为private,这种变量只能在本类中调用(在其他地方调用会报错)
7
在用mongo等非关系型数据库的时候,我们不希望把脏数据、空数据存进数据库,造成后面的混乱。写一个函数(Python3),删除json dict里面的空数据,包括空dict,空list,空string,None。假设输入的Python dict从合法json读取, 即key必为string, value可以是number/string/list/dict。例如:
{"a": [1,0,"c", {"x":1}]} -> {"a": [1,0,"c", {"x":1}]} |
答:
def clean_json(data: (dict,list,int,float,str,None)): |
注意:不能直接对原数组or字典作删除操作,会报错!
例如
l = [1,2,3] |