一入python深似海--tuple和set
阿新 • • 發佈:2019-01-26
tuple(元組)
另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改,tuple屬於不可變物件。比如同樣是列出同學的名字:
>>> classmates = ('Michael', 'Bob', 'Tracy')
現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他獲取元素的方法和list是一樣的,你可以正常地使用classmates[0]
,classmates[-1]
,但不能賦值成另外的元素。不可變的tuple有什麼意義?因為tuple不可變,所以程式碼更安全。如果可能,能用tuple代替list就儘量用tuple。
只有1個元素的tuple定義時必須加一個逗號,,以消除與數學表示式的歧義。
>>> t = (1,)#not (1)
>>> t
(1,)
最後來看一個“可變的”tuple:
<span style="font-size:10px;">>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])</span>
這個tuple定義的時候有3個元素,分別是'a'
,'b'
和一個list。不是說tuple一旦定義後就不可變了嗎?怎麼後來又變了?別急,我們先看看定義的時候tuple包含的3個元素:
當我們把list的元素'A'
和'B'
修改為'X'
和'Y'
後,tuple變為:
表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a'
,就不能改成指向'b'
,指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的!
理解了“指向不變”後,要建立一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。
set(集合)
set可以看成數學意義上的無序和無重複元素的集合。
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
set([1, 2, 3])
set操作結合:
通過add(key)
方法可以新增元素到set中,可以重複新增,但不會有效果:
>>> s.add(4)
>>> s
set([1, 2, 3, 4])
>>> s.add(4)
>>> s
set([1, 2, 3, 4])
通過
remove(key)
方法可以刪除元素:
>>> s.remove(4)
>>> s
set([1, 2, 3])
兩個set可以做數學意義上的交集、並集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
set([2, 3])
>>> s1 | s2
set([1, 2, 3, 4])
set和dict的唯一區別僅在於沒有儲存對應的value,但是,set的原理和dict一樣,所以,同樣不可以放入可變物件,因為無法判斷兩個可變物件是否相等,也就無法保證set內部“不會有重複元素”。試試把list放入set,看看是否會報錯。