使用list和tuple
list
Python內(nèi)置的一種數(shù)據(jù)類型為列表:list.list是一種有序的集合,可以隨時添加或刪除其中的元素;
classmates = ['Michael','Bob','Tracy']
classmates
['Michael', 'Bob', 'Tracy']
變量classmates就是一個list列表,可以使用len()獲取元素的個數(shù)
len(classmates)
3
用索引的方式訪問每一個位置的元素,索引是從0開始的;
classmates[0]
'Michael'
classmates[1]
'Bob'
classmates[2]
'Tracy'
當索引超出范圍時,會報IndexError錯誤,最后一個索引是len(classmates)-1;如果想要獲取最后一個元素時,除了計算索引位置意外,還可以使用-1做索引獲取最后一個元素;
classmates[-1]
'Tracy'
一次類推可以倒數(shù)獲取元素
classmates[-2]
'Bob'
classmates[-3]
'Michael'
- list是一個有序的列表,可以追加元素到list末尾;
classmates. append('Adam')
classmates
['Michael', 'Bob', 'Tracy', 'Adam']
- 也可以把元素插入到指定的位置,比如索引號為1的位置
classmates. insert(1,'jack')
classmates
['Michael', 'jack', 'Bob', 'Tracy', 'Adam']
- 要刪除list末尾的元素,使用pop()的方法;
classmates. pop()
classmates
['Michael', 'jack', 'Bob', 'Tracy']
- 要刪除list指定位置的元素,使用pop(i)放發(fā),i為索引位置
classmates
classmates. pop(2)
classmates
['Michael', 'jack', 'Tracy']
- 要把某個元素,替換成別的元素,可以直接賦值
classmates[2] = 'lucky'
classmates[2]
'lucky'
- list 里面的數(shù)據(jù)類型也可以不同
L = ['Apple',1314,True]
L
['Apple', 1314, True]
- list元素也可以是另一個list;
s = ['python','java',['asp','php'],'scheme']
s
len(s)
4
- s只有四個元素,拆開寫的化容易理解
p = ['asp','php']
s = ['python','java',p,'scheme']
s
len(s)
4
- 要拿到php,可以說寫成p[1],或s[2][1],因此s也可以看成二維數(shù)組,類似的還有三維,四維......等;如果list中沒有元素,就是一個空的list,他的長度為零
L = []
len(L)
0
tuple
另一種有序列表叫做元組,tuple.tuple與list類似,只是tuple一旦初始化后,不可以修改,比如同樣列出名字;
classmates = ('Michael','Bob','Tracy')
classmates
('Michael', 'Bob', 'Tracy')
現(xiàn)在的classmates不能刪除,不能修改,append()及insert()這樣的方法,其他獲取元素的方法和list一樣??梢允褂胏lassmates[1],classmates[-1],但不能賦值成另外的元素;
classmates[-1]
'Tracy'
classmates[1] = 'lucky'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-56-0a4ad712bcaa> in <module>()
----> 1 classmates[1] = 'lucky'
TypeError: 'tuple' object does not support item assignment
classmates. pop()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-58-453faef24955> in <module>()
----> 1 classmates. pop()
AttributeError: 'tuple' object has no attribute 'pop'
classmates. append('lucky')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-61-787e6c41a391> in <module>()
----> 1 classmates. append('lucky')
AttributeError: 'tuple' object has no attribute 'append'
classmates. insert(1,'lucky')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-60-509bbfca6237> in <module>()
----> 1 classmates. insert(1,'lucky')
AttributeError: 'tuple' object has no attribute 'insert'
不可變的tuple的意義,因為不可變,所以代碼更安全,如果可能,能用tuple代替list,盡量使用tuple代替list;
tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須確定下來,比如
t = (1,2)
t
(1, 2)
如果想要定義一個空的tuple,可以寫成()
t = ()
t
()
一個錯誤的定義tuple的實例。定義的不是tuple,定義的是1這個數(shù)。這是因為()表達的是tuple,又可以表示數(shù)學(xué)公式中的小括號,這就產(chǎn)生了歧義,因此python規(guī)定,這種情況下,安小括號進行計算,計算結(jié)果自然為1。
t = (1)
t
1
所以,只有一個元素的tuple定義是必須添加一個逗號,,來消除歧義;
t = (1,)
t
(1,)
python只顯示一個元素的tuple時,也會添加逗號,,以免誤解成數(shù)學(xué)計算里的公式括號;
- 可變的tuple
t = ('a','b',['A','B'])
t[2][0]
#t[2][1]
#t
'A'
t = ('a','b',['A','B'])
#t[2][0]
t[2][1]
#t
'B'
t = ('a','b',['A','B'])
#t[2][0]
#t[2][1]
t
('a', 'b', ['A', 'B'])
這個tuple的三個元素為,兩個tuple,一個list,表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list并沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的!
請用索引取出下面list的指定元素:
# -*- coding: utf-8 -*-
L = [
['Apple', 'Google', 'Microsoft'],
['Java', 'Python', 'Ruby', 'PHP'],
['Adam', 'Bart', 'Lisa']
]
L = [
['Apple', 'Google', 'Microsoft'],
['Java', 'Python', 'Ruby', 'PHP'],
['Adam', 'Bart', 'Lisa']
]
print (L[0])
print (L[1])
print (L[2])
print (L[0][0])
print (L[1][0])
print (L[2][0])
print (L[0][1])
print (L[1][1])
print (L[2][1])
print (L[0][2])
print (L[1][2])
print (L[2][2])
print (L[1][3])
['Apple', 'Google', 'Microsoft']
['Java', 'Python', 'Ruby', 'PHP']
['Adam', 'Bart', 'Lisa']
Apple
Java
Adam
Google
Python
Bart
Microsoft
Ruby
Lisa
PHP