面试题day02
-
阅读下面的代码,写出A0,A1,至An的最终值。
A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5))) A1 = range(10) A2 = [i for i in A1 if i in A0] A3 = [A0[s] for s in A0] A4 = [i for i in A1 if i in A3] A5 = {i:i*i for i in A1} A6 = [[i,i*i] for i in A1]
结果为:
# 在python2中zip()函数返回的是一个列表 # zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。 # 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。 zorozhang@ubuntu:~/PycharmProjects/python复习$ python2 Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> m = zip(('a','b','c','d','e'),(1,2,3,4,5)) >>> m [('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)] >>> dict(m) {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} >>> A0={'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} A1=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] A2=[] A3=[1,3,2,5,4] A4=[1,2,3,4,5] A5={0:0,1:1,2:4,3:9,4:16,5:25,6:36,7:49,8:64,9:81} A6=[[0,0],[1,1],[2,4],[3,9],[4,16],[5,25],[6,36],[7,49],[8.64],[9,81]]
-
Python2中range和xrange的区别?
两者的用法相同,不同的是range返回的结果是一个列表,而xrange的结果是一个生成器,前者是直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间,所以当列表很长时,使用xrange性能比range好。
-
考虑以下两段python代码,如果运行结束,命令行中的运行结果是什么?
l = [] for i in xrange(10): l.append({'num':i}) print(l)
l = [] a = {'num':0} for i in xrange(10): a['num'] = i l.append(a) print(l)
两段代码的运行结果是否相同,如果不相同,原因是什么?
第一段代码的结果:
[{'num':0},{'num':1},{'num':2},{'num':3},{'num':4},{'num':5},{'num':6},{'num':7},{'num':8},{'num':9}]
第二段代码的结果:
[{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9}]
分析原因:
第二段代码中,字典是可变对象,l.append(a)相当于把a的引用传入到列表中,所以当修改a[‘num’]的值时,l中的值也会跟着改变,相当于浅拷贝。
-
以下python程序的输出?
for i in range(5,0,-1): print(i)
答案:5,4,3,2,1
-
4G内存怎么读取一个5G的数据?
方法一:
可以通过一个生成器,分多次读取,每次读取数量相对少的数据进行处理,处理结束后再读取后面的数据。
方法二:
可以通过linux命令split切割成小文件,然后再对数据进行处理,此方法效率比较高,可以按照行数切割,也可以按照文件大小切割。