列表是序列類型中的一種數據結構。使用中括號[]包裹的一系列數據元素的集合。
如何定義一個列表?
一般形式:
x = [] 或 y = [元素1,元素2,元素3,...] 或 z = [None] 或 m = list() # 使用工廠函數list創建一個空列表
列表的特點:
a、用[]包裹;
b、元素間用逗號‘,’分隔;
c、元素的類型可以是任意的數據類型(如:數值,字符串,列表,元祖,字典等等);
d、元素是有序排列的,可以通過索引和分片(切片)來獲取某個元素值。
列表的常見操作:
1、通用序列操作:
A、索引(正向索引是從0開始計數的,反向索引是從-1開始的)
操作符:[]
一般形式:
[元素1,元素2, 元素3, 元素4,... , 元素n-1, 元素n]
正---> 0 1 2 3 n-2 n-1
-n -n+1 -n+2 -n+3 ... -2 -1 <---反
如: alist = [123, 'name', ['age', 'male']]
①正向索引(從左向右):
alist[0] ---> 123
alist[1] ---> name
alist[2] --->['age', 'male']
②反向索引(從右向左)
alist[-1] ---> ['age', 'male']
alist[-2] ---> name
alist[-3] ---> 123
B、分片(切片,連續取一片值,返回一個列表)
操作符:[:] 或 [::]
特點:
a、顧頭不顧尾(即分片取值的時候,包括第一個start_index索引號對應的值,不包括end_index索引號對應的值)
b、start_index對應的元素比end_index對應的元素出現的晚並且是正向索引的話,結果就是一個空序列。
一般形式:
[start_index : end_index] 或 [start_index : end_index : step_value]
如: alist = [123, 'name', ['age', 'male'], ('name', 'age')]
①正向索引(從左向右):
alist[0:1] ---> [123]
alist[1:3] ---> ['name', ['age', 'male']]
alist[:] ---> [123, 'name', ['age', 'male'], ('name','age')]
alist[-3:-1] ---> [123, ['age', 'male']
alist[0:-1] ---> [123, 'name', ['age', 'male']]
alist[0:3:2] ---> [123, ['age', 'male']] # 更大的步進
alist[::4] ---> [123] #步進超出索引
②反向索引(從右向左)
alist[::-1] ---> [('name', 'age'), ['age', 'male'], 'name',123]
alist[3:0:-1] ---> [('name', 'age'), ['age', 'male'], 'name']
alist[-1:-3:-1] ---> [('name, 'age'), ['age', 'male']]
alist[-1:0:-1] ---> [('name', 'age'), ['age', 'male'], 'name']
alist[2:0:-1] ---> [['age', 'male'], 'name']
alist[-1:-4:-2] ---> [('name', 'age'), 'name']# 更大的步進
alist[-1:-4:-4] ---> [('name', 'age')] #步進超出索引範圍
C、列表相加 '+'
操作符: +
功能特點:
把兩個列表的元素組合在一起,生產一個新列表。
x = [1,2,3]
y = [4,5,6]
x + y ---> [1,2,3,4,5,6]
m = ['name',[123,'male'],('age', 'hat')]
n = [12, ('men', 'data'), '40']
m + n = ['name', [123, 'male'], ('age', 'hat'), 12, ('men', 'data'), '40']
D、列表相乘 '*'或叫重複操作符
操作符: *
一般形式:[]*n
功能特點:
生成一個新列表,原有的列表數據被重複n次。
如:alist = ['name', 'age']*3 ---> ['name', 'age', 'name', 'age', 'name', 'age']
F、成員資格
操作符:in 和 not in
一般形式: 'name' in ['name', 'male'] 或 'man' not in ['name', 'male']
功能特點: 檢查某個值是否在列表中。是返回True,否返回False。
如:
'name' in ['name', 'male'] ---> Ttrue
'name' not in ['name', 'male'] --->False
'age' in ['name', 'male'] ---> False
'age' not in ['name', 'male'] ---> True
G、長度、最小值、最大值
操作符:len()、min()、max()
一般形式:len(object)、min(object)、max(object)
功能特點:
len(object) ---> object的長度
min(object) ---> object的最小值
max(object) ---> object的最大值
如:
len(['name', 'age', ['male', 123], 123]) ---> 4 # 返回列表元素個數
len('hello world') ---> 11 # 返回字符串的字符數量
min(['name', 'age', ['male', 123], 123]) ---> 123
min('hello world') ---> ' '
min(4,1,3,0,9) ---> 0
min('a',1,'l','k',9) ---> 1
max(['name', 'age', ['male', 123], 123]) ---> 'name'
max('hello world') ---> 'w'
max(4,1,3,0,9) ---> 9
max('a',1,'l','k',9) ---> 'l'
2、列表更新:更改元素值
操作符: =
一般形式: alist[index] = 更改後的值 或 alist[start_index:end_index:step_value] = (value1, value2, ...)/[value1, value2, ...]
功能特點:
通過在等號'='的左邊指定一個索引或索引範圍的方式來更改一個或幾個元素的值,或者叫元素賦值和分片賦值
注意點:
a、alist[index] = 更改後的值 這種形式更改值時,若index超出了列表本身索引範圍時,會發生異常(IndexError: list assignment index out of range):
>>> alist = [1,2]
>>> alist
[1, 2]
>>> alist[2]=3
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
alist[2]=3
IndexError: list assignment index out of range
b、alist[start_index:end_index:step_value] = (value1, value2, ...)/[value1, value2, ...] 更改列表元素值時,
若索引範圍元素個數小於或大於更改後值的個數時,將更改後的值以開始的索引把更改後的值插入到列表中。
①小於的情況
>>> alist
[1, 2]
>>> alist[0:2] = [7,8,9,0]
>>> alist
[7, 8, 9, 0]
>>> alist = [1,2]
>>> alist
[1, 2]
>>> alist[0:1] = [7,8,9,0]
>>> alist
[7, 8, 9, 0, 2]
②大於的情況
>>> alist = [1,2,3,4,5,6]
>>> alist
[1, 2, 3, 4, 5, 6]
>>> alist[0:3] = [8,9]
>>> alist
[8, 9, 4, 5, 6]
3、列表更新:刪除元素
操作函數:del 或 alist[:] =[] 分片賦值方法
一般形式:del alist[index] 或 del alist[:] 或 del alist
功能特點:
刪除某個元素值或列表
如:
>>> alist
[8, 9, 4, 5, 6]
>>> del alist[0]
>>> alist
[9, 4, 5, 6]
>>> alist = [8,9,4,5,6]
>>> alist
[8, 9, 4, 5, 6]
>>> del alist[0:2]
>>> alist
[4, 5, 6]
>>> del alist
>>> alist
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
alist
NameError: name 'alist' is not defined
4、列表的內建方法
a、alist.append() # 在列表的末尾追加新對象,接受一個參數
>>> alist = [1,2,3]
>>> alist.append(4)
>>> alist
[1, 2, 3, 4]
b、alist.count() # 統計某個元素在列表中出現的次數,接受一個參數
>>> alist = [[1,2], 1,1,[2,1,[1,2]]]
>>> alist.count(1)
2
>>> alist.count([1,2])
1
c、alist.extend() # 在列表的末尾一次性追加另一個序列中的多個值,接受一個參數
>>> alist = [1,2,3]
>>> alist1 = [4,5,6]
>>> alist.extend(alist1)
>>> alist
[1, 2, 3, 4, 5, 6]
d、alist.index(value, [start,[stop]]) # 此方法用於從列表中找出某個值第一個匹配項的索引位置,如果不存在,則引發ValueError異常。start/stop指定在查找的索引範圍。
>>> alist = ['name', 'age', 'male']
>>> alist.index('age')
1
>>> alist.index('male')
2
>>> alist.index('allen')
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
alist.index('allen')
ValueError: 'allen' is not in list
e、alist.insert(index, object) # 在指定的索引位置插入對象。此方法也可以用分片賦值的方式來實現。
>>> alist = ['name', 'age', 'male']
>>> alist.insert(1,'allen')
>>> alist
['name', 'allen', 'age', 'male']
f、alist.pop([index]) # 移除並返回指定索引位置的值,默認移除並返回最後一個列表元素。如果列表爲空或指定的索引值超出了alist的索引範圍,則引發一個IndexError。
>>> alist = ['name', 'age', 'male']
>>> alist.pop()
'male'
>>> alist
['name', 'age']
>>> alist.pop(1)
'age'
>>> alist
['name']
>>> alist = []
>>> alist.pop()
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
alist.pop()
IndexError: pop from empty list
g、alist.remove(value) # 移除列表中第一個出現的value元素,如果value不存在,則引發ValueError。
>>> alist = ['name', 'age', 'male', 'age']
>>> alist.remove('age')
>>> alist
['name', 'male', 'age']
>>> alist.remove('allen')
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
alist.remove('allen')
ValueError: list.remove(x): x not in list
注意:remove方法是一個沒有返回值的原位置改變方法。
h、alist.reverse() # 將列表中的元素反向存放(或叫排序)
>>> alist = ['name', 'age', 'male']
>>> alist.reverse()
>>> alist
['male', 'age', 'name']
注意:reverse方法也改變了列表但不返回值。
i、alist.sort(cmp=None, key=None, reverse=False) # 在原位置對列表進行排序(注:會改變原來的列表)。
>>> alist = ['name', 'age', 'male']
>>> alist.sort()
>>> alist
['age', 'male', 'name']
5、列表的內建函數
a、cmp(x, y) # 若x<y 返回 -1,若x==y 返回 0 ,若x>y 返回 1。
比較算法:
對兩個列表的元素進行比較;
如果比較的元素是同類型的,則比較其值,返回結果;
如果兩個元素不是同一類型,則檢查它們是否是數字:
如果是數字,執行必要的數字強制類型轉換,然後比較;
如果有一方的元素是數字,則另一方的元素“大”(數字是“最小的”);
否則,通過類型名字的字母順序進行比較;
如果有一個列表首先達到末尾,則另一個長一點的列表“大”;
如果我們用盡了兩個列表的元素而且所有元素都是相等的,那麼結果就是返回一個0.
b、len() # 返回列表的元素個數。
>>> alist = ['name', 'age', 'male']
>>> len(alist)
3
c、max() 和 min() #返回列表元素的最大值和最小值。
d、sorted(iterable, cmp=None, key=None, reverse=False) # 對iterable進行排序並返回列表的副本,不會改變原列表。
>>> alist = ['name', 'age', 'male']
>>> sorted(alist)
['age', 'male', 'name']
>>> alist
['name', 'age', 'male']
e、reversed() # 對列表進行反向排序,返回一個迭代對象,用list()函數這個迭代對象轉換成一個列表。
>>> alist = ['name', 'age', 'male']
>>> reversed(alist)
<listreverseiterator object at 0x0000000002A65B70>
>>> list(reversed(alist))
['male', 'age', 'name']
f、enumerate() # 返回一個可迭代對象的索引和值。
>>> alist = ['name', 'age', 'male']
>>> enumerate(alist)
<enumerate object at 0x0000000002A567E0>
>>> list(enumerate(alist))
[(0, 'name'), (1, 'age'), (2, 'male')]
>>> for i, j in enumerate(alist):
print i,j
0 name
1 age
2 male
g、zip() # zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
>>> alist = ['name', 'age', 'male']
>>> alist1 = ['allen', 40, 'man']
>>> zip(alist, alist1)
[('name', 'allen'), ('age', 40), ('male', 'man')]
>>> for m, n in zip(alist, alist1):
print m,n
name allen
age 40
male man
h、sum() # sum(sequence[, start]) -> value ;star 默認值爲0,如果列表爲空,返回start。
>>> alist = [1,2,3,4]
>>> sum(alist)
10
>>> sum(alist, 1)
11
>>> alist=[]
>>> sum(alist)
0
>>> sum(alist, 4)
4
i、list() #創建或轉換一個可迭代對象爲列表。
>>> x = list()
>>> x
[]
>>> y = list('hello world')
>>> y
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']