31、寫一個列表生成式,產生一個公差為11的等差數列
1.print([x*11 for x in range(10)])
32、給定兩個列表,怎么找出他們相同的元素和不同的元素?
1. list1 = [1,2,3]
2. list2 = [3,4,5]
3. set1 = set(list1)
4. set2 = set(list2)
5. print(set1&set2)
6. print(set1^set2)
33、請寫出一段Python代碼實現刪除一個list里面的重復元素?
比較容易記憶的是用內置的set:
1. l1 = ['b','c','d','b','c','a','a']
2. l2 = list(set(l1))
如果想要保持他們原來的排序:
用list類的sort方法:
1. l1 = ['b','c','d','b','c','a','a']
2. l2 = list(set(l1))
3. l2.sort(key=l1.index)
4. print(l2)
也可以這樣寫:
1. l1 = ['b','c','d','b','c','a','a']
2. l2 = sorted(set(l1),key=l1.index)
3. print(l2)
也可以用遍歷:
1. l1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a']
2. l2 = []
3. for i in l1:
4. if not i in l2:
5. l2.append(i)
6. print(l2)
34、下面這段代碼的輸出結果是什么?請解釋?
1. def extendlist(val, list=[]):
2. list.append(val)
3. return list
4. list1 = extendlist(10)
5. list2 = extendlist(123, []
6. list3 = extendlist('a')
7. print("list1 = %s" %list1)
8. print("list2 = %s" %list2)
9. print("list3 = %s" %list3)
10. 輸出結果:
11. list1 = [10, 'a']
12. list2 = [123]
13. list3 = [10, 'a']
新的默認列表只在函數被定義的那一刻創建一次。當extendList被沒有指定特定參數list調用時,這組list的值
隨后將被使用。這是因為帶有默認參數的表達式在函數被定義的時候被計算,不是在調用的時候被計算。
35、將以下3 個函數按照執行效率高低排序
1. def f1(lIn):
2. l1 = sorted(lIn)
3. l2 = [i for i in l1 if i<0.5]
4. return [i*i for i in l2]
5. def f2(lIn):
6. l1 = [i for i in l1 if i<0.5]
7. l2 = sorted(l1)
8. return [i*i for i in l2]
9. def f3(lIn):
10. l1 = [i*i for i in lIn]
11. l2 = sorted(l1)
12. return [i for i in l1 if i<(0.5*0.5)]
按執行效率從高到低排列:f2、f1和f3。
要證明這個答案是正確的,你應該知道如何分析自己代碼的性能。
Python中有一個很好的程序分析包,可以滿足這個需求。
1. import random
2. import cProfile
3. lIn = [random.random() for i in range(100000)]
4. cProfile.run('f1(lIn)')
5. cProfile.run('f2(lIn)')
6. cProfile.run('f3(lIn)')