python中最基礎的兩種集合,區別:列表是動態的,大小能夠改變,元組是不可變的,一旦建立就不能修改
,由於不變性,因此元組是可哈希的。 css
列表是對其餘對象的引用組成的連續數組,由於是數組,因此數組有的優勢列表都有,查找效率比鏈表高,插入與刪除的操做效率比鏈表低。python的列表不是鏈表,須要真正的鏈表的時候,python在內置collections模塊中提供了deque(雙端隊列),他是棧和隊列的通常化(是雙向鏈表) html
在使用常規的for循環往列表中添加數據時,由於python是解釋型語言,解釋器每次循環都須要判斷序列中須要修改的部分,而且須要用一個計數器來跟蹤須要處理的元素,而且在添加時使用append()方法是列表方法,,每次遍歷還須要額外執行查找append函數的查詢函數,列表推導正式解決這個問題的正確方法,它對上述一部分作了自動化處理,提升了效率
普通for循環添加數據 python
events=[] for i in range(10): if i%2==0: events.append(i)
使用列表推導git
events=[i for i in range(10) if i%2==0]
在循環使用序列時,均可以使用枚舉這個內置函數獲取其索引,不止列表能夠,但凡是序列類型的均可以,包括字符串: github
for i,e in enumerate('hello'):
... print(i,e)
...
0 h
1 e
2 l
3 l
4 o
若是須要合併多個列表中的元素,能夠使用內置的zip()函數。對兩個大小相等的可迭代對象進行均勻遍歷時, web
for item in zip([1,2,3],[4,5,6]):
... print(item)
...
(1, 4)
(2, 5)
(3, 6)
調用兩次zip時,可將其恢復原狀 canvas
for item in zip(*zip([1,2,3],[4,5,6])):
... print(item)
...
(1, 2, 3)
(4, 5, 6)
zip([1,2,3],[4,5,6])返回的是地址名,只有使用指針*zip([1,2,3],[4,5,6])才能夠有返回值 數組
使用任意序列類型,只要賦值運算符左邊的變量數目與序列中的元素數目相等,均可以將序列中的元素解包到左邊的變量中去 ruby
a,b,*c='hello' >>> a 'h' >>> b 'e' >>> c ['l', 'l', 'o'] 使用*號 >>> a,*b,c=0,1,2,3 >>> a, (0,) >>> b [1, 2] >>> c 3 嵌套解包 >>> (a,b),(c,d)=(1,2),(3,4) >>> a 1 >>> b 2 >>> c 3 >>> d 4