Python 基礎——tuple與list、append與extend
阿新 • • 發佈:2019-01-27
tuple
可讀不可寫,tuple
的元素不可作左值,list
反之
>>>t = (1, 2, 3)
>>>t[:]
(1, 2, 3)
>>>t[0] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>l = [1, 2, 3]
>>>l[:]
[1, 2 , 3]
>>>l[0] = 4
兩者的成員函式:tuple
幾乎沒什麼成員函式,list
卻有著豐富的成員函式:
>>>t = (1, 2, 3, 3, 4)
>>>dir(t)
# 有意義的成員函式只有`count`、`index`
# count,記錄元組中某一元素出現的次數,index返回值所在的下標
>>>t.count(3)
2
>>>t.count(2)
1
>>>t.index(4)
4
>>>l=[1, 2, 3, 4]
dir(l)
# extend見名知意,擴充套件,既然存在我們廣泛使用`[].append(*)`函式,`extend`
# 從這也意義上說,`tuple`更像是`C`語言中的一維陣列,長度在初始化時即已確定,
# 而`vector`(以`C++STL`)為例,也存在著`push_back()`之類的函式,可動態擴從其大小
>>>l = [1, 2, 3]
>>>l.extend(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
# 這點可見extend與append函式的區別
>>>l.extend([4, 5])
>>>l
[1, 2, 3, 4, 5]
>>>l.append([6, 7])
>>>l
[1, 2, 3, 4, 5, [6, 7]]
# 也即每次append新增的是一個元素(作為一個整體新增進去),
# 而這個元素的型別不定,可以是整型,也可以是字串型別,
# 而extend的引數必須是可迭代的型別,這樣新增的是其中的每一個元素,
# 而不是作為整體進行新增
彼此間型別轉換
>>>l = [1, 2, 3, 3, 4]
>>>tuple(l)
(1, 2, 3, 3, 4)
>>>t = (1, 2, 3, 3, 4)
>>>list(t)
[1, 2, 3, 3, 4]
>>>(l)
[1, 2, 3, 3, 4]
>>>[t] # 由元組組成的list
[(1, 2, 3, 3, 4)]
tuple
的切片還是tuple
,list
的切片還是list
(這可能是一句廢話)
>>>type(t[0:2])
<class 'tuple'>
>>>type(l[0:3])
<class 'list'>