朋友最近面試某個企業,其中有幾道列表的題目,對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']
相信通過前面幾個例子,我們也可以指定這個題目是怎麼一回事了吧。這裏就不解釋了。