串列與tuple裡面的成員可以是任何的物件,數字、字串、其他串列或tuple,甚至是辭典、function物件...。它們也可以像字串一樣使用索引、切片來取得其中的成員。
串列使用中括號,tuple使用小括號,例如:
>>> a = [123, 'abc', [111,222], (333,444)]
>>> print a[0]
123
>>> print a[2][1]
222
>>> print a[3][1]
444
上例中,串列中包含數字123, 字串abc, 另一個串列[111,222], 與tuple (333,444)
串列與tuple的索引與切片使用方式與字串完全相同,請參考Python字串。
相加
串列或tuple可以相加,前題是串列必須與串列相加,tuple則必須與tuple相加,最後會傳回新的串列或tuple。>>> a = [111,222] + [333,444] + [555,666]
>>> a
[111, 222, 333, 444, 555, 666]
>>>
>>> b = ('aaa','bbb') + ('ccc','ddd')
>>> b
('aaa', 'bbb', 'ccc', 'ddd')
但如果要將串列與tulple相加,則會發生錯誤
>>> c = a + b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "tuple") to list
若有需要將串列與tuple相加,則必須呼叫list函式將資料轉成list,或tuple函式將資料轉成tuple再相加。
>>> c = a + list(b)
>>> c
[111, 222, 333, 444, 555, 666, 'aaa', 'bbb', 'ccc', 'ddd']
>>>
>>> c = tuple(a) + b
>>> c
(111, 222, 333, 444, 555, 666, 'aaa', 'bbb', 'ccc', 'ddd')
相乘
可以將串列或tuple重複數倍。類似字串的乘法。>>> a = [111,222]
>>> a * 3
[111, 222, 111, 222, 111, 222]
>>>
>>> b = ('aaa','bbb')
>>> b * 5
('aaa', 'bbb', 'aaa', 'bbb', 'aaa', 'bbb', 'aaa', 'bbb', 'aaa', 'bbb')
修改
適當之處修改只適用於串列,不適用於tuple。將串列裡的'abc'換成另一個字串:
>>> a = [123, 'abc', [111,222], (333,444)]
>>> a[1] = 'xyz'
>>> a
[123, 'xyz', [111, 222], (333, 444)]
也可以一次置換多個成員,且數量可以不同(更多或更少)
>>> a = [123, 'abc', [111,222], (333,444)]
>>> a[0:2] = ['aaa','bbb','ccc']
>>> a
['aaa', 'bbb', 'ccc', [111, 222], (333, 444)]
上例將123,'abc'換成'aaa','bbb','ccc'
刪除
刪除成員只適用於串列,不適用於tuple。刪除也非常方便
>>> a = [123, 'abc', [111,222], (333,444)]
>>> a[1:3] = []
>>> a
[123, (333, 444)]
另外,刪除也可以用 del 敘述
>>> a = [123, 'abc', [111,222], (333,444)]
>>> del a[1:3]
>>> a
[123, (333, 444)]
不用索引的方式刪除,也可以呼叫remove方法依內容來刪除, 但限制一次只能刪除一個成員。
>>> a = [123, 'abc', [111,222], (333,444)]
>>> a.remove('abc')
>>> a
[123, [111, 222], (333, 444)]
>>>
>>> a.remove([111,222])
>>> a
[123, (333, 444)]
append與pop
新增成員只適用於串列,不適用於tuple。可以呼叫append方法,增加成員到串列。
>>> a = [123,456]
>>> a.append(789)
>>> a
[123, 456, 789]
呼叫pop取出串列成員,可以指定索引,若不指定則預設為最後一個,並在取出後從串列刪除該成員。
>>> a = [111,222,333,444,555]
>>> a.pop()
555
>>> a
[111, 222, 333, 444]
>>> a.pop(0)
111
>>> a
[222, 333, 444]
其他
關於tuple有一個更偷懶的方法,就是不加小括號>>> a = 111, 222, 333
>>> a
(111, 222, 333)
但如果只有一個項目,不管有沒有加小括號都要在後面加逗號
>>> a = 111,
>>> a
(111,)
>>> a = (111,)
>>> a
(111,)
>>> b = 111
>>> b
111
>>> b = (111)
>>> b
111
上例b因沒有加逗號,而被誤認為數字111
python因為有了串列與tuple,可以省掉很多製作資料結構所花費的心力,可以更專注在要解決的問題。有一個用法也很方便,就是要交換2個變數值,以傳統C語言的寫法可能會是:
temp = a;
a = b;
b = temp;
在python可以這麼寫:
>>> a = 1
>>> b = 2
>>> a, b = b, a
>>> a
2
>>> b
1
看到了吧,只要一行 a, b = b, a 是不是更直覺了呢?
很有幫助!謝謝!
回覆刪除對於新手來說講解的很棒
回覆刪除感謝
感謝,很清楚。
回覆刪除想起立鼓掌!搞清楚了!謝謝!
回覆刪除