python几道对于列表的面试题
朋友最近面试某个企业,其中有几道列表的题目,对python中的列表知识需要有很清晰的认识。下面对这几个题目列一下:
题目一:
alist = [1, 2, 3, 4, 5, 6] for aa in alist: alist.remove(aa) print(alist)
来来来,我们解析下题目。
我先说答案:
[2, 4, 6]
这里很多人会说最后答案为[]。
这是错误的。我们这里要记住二点:
1.列表是可变的序列,所以在对原序列删除时,序列就会变.
2. for循环真正是通过索引来找到元素的
所以。我们继续看这个问题
当for为第一次时,索引为0,alist为所有的。执行后alist为[2,3,4,5,6]
当for第2次时,索引为1,aa对应的索引对应为3,执行后alist为[2,4,5,6]
当for第3次时,索引为2,aa对应为索引对应为5,执行后alist为[2,4,6]
alist只为3了,所以不会继续执行for循环了
题目二:
gl_var = 1
gl_var = 1 gl_list = [] def test_function(): gl_var = 2 gl_list.append(1) test_function() print(gl_var, gl_list)
还是先直接说下答案:
1,[1]
这个题目,有2个考察点:
1. 局部变量和全局变量
2. 列表是可变的,定义的指定内存
gl_var是全局变量,但在含数中数据局启变量,最终不改变值
gl_list是列表,在定义时,会执行一快内存分配给列表,函数中对列表做了改变,最终导致全局的gl_list也变更了
题目三:
def testExtend(val, list_l=[]): list_l.append(val) return list_l list1 = testExtend(10) list2 = testExtend(123,[]) list3 = testExtend('a') print(list1, list2, list3)
还是直接先说答案吧,答案为:
[10, 'a'] [123] [10, 'a']
说说原因:
我们这里还是考虑列表的可变性,函数中list_l是一个可变列表。所以在实际中会改变值。
第2个含税,传了一个空列表当当数,所以就为空
题目四:
class Test(object): def p_test(self, data=[]): data.sort() data.append('end') return data test1 = Test() print(test1.p_test()) test2 = Test() print(test2.p_test()) test3 = Test() print(test3.p_test(data=['name', 'age:35'])) test4=Test() print(test4.p_test())
也还是直接说答案:
['end'] ['end', 'end'] ['age:35', 'name', 'end'] ['end', 'end', 'end']
相信通过前面几个例子,我们也可以指定这个题目是怎么一回事了吧。这里就不解释了。
Email:362299908@qq.com