01-07 31—35


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)')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM