列表(list)
列表是一種有序的集合,有點類似c里面的數組。它的特點是,可以隨時向里面添加或刪除其中的元素,在python中經常用來存放數據。列表的特點是中括號,內部元素用逗號隔開。
1. 在python中使用如下方法定義列表
a = [] #這時候a就是一個空的列表
name = ['Tom'] #這時候name是一個列表,里面有一個字符串,也就是'Tom'
classmates = ['Michael', 'Bob', 'Tracy'] #classmate是一個含有三個字符串的列表
list1 = ['Monday', 1, 2.5] #list1中有三個元素,字符串、整型、浮點型
在這個列表中,可以放進去任何元素,不論你的元素是字符串、整型、浮點型、還是布爾值、空值,包括列表什么的,都可以放進去。
元素與元素之間,用逗號隔開。
2. 使用索引值獲取列表中的值
列表會為每個元素分配序號,這個序號代表它的位置,稱為索引(index),第一個元素的位置是0,第二個元素是1,以此類推。
>>> classmates = ['Michael', 'Bob', 'Tracy'] #定義一個列表
>>> print(classmates[0]) #classmates[0]表示classmates中的第一個元素
Michael
>>> b = classmates[1] #將classmates中的第二個元素賦值給b
>>> print(b) #打印b的值
Bob
使用索引獲取列表中的值時,需要使用中括號來訪問,在中括號前面加上列表名,中括號內部是元素的索引。
0代表第一個元素的位置,1代表第二個,-1代表倒數第一個,-2代表倒數第二個
>>> classmates = ['Michael', 'Bob', 'Tracy'] #定義列表
>>> print(classmates[-1]) #打印倒數第一個元素
Tracy
>>> print(classmates[-2]) #打印倒數第二個元素
Bob
使用len()
函數,可以查看列表里面有多少個元素
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> print(len(classmates))
3
3. 添加元素
在python中,列表的操作是非常的靈活的,我們可以向其中添加或刪除元素。
添加使用list.append()
函數
>>> classmates = ['Michael', 'Bob', 'Tracy'] #定義列表
>>> classmates.append('Tom') #在classmates結尾加入'Tom'這個字符串元素
>>> print(classmates) #打印classmates這個列表
['Michael', 'Bob', 'Tracy', 'Tom']
list.append()
函數是將元素插入到列表的末尾,當我們想在特定位置插入元素時可以使用list.insert()
函數
>>> classmates = ['Michael', 'Bob', 'Tracy'] #定義字典
>>> classmates.insert(1,'Tom') #在索引位置1插入'Tom'
>>> print(classmates) #打印列表
['Michael', 'Tom', 'Bob', 'Tracy']
list.insert()
函數接受兩個參數,第一個參數是插入位置,第二個參數是要插入的元素。
需要注意的是,在使用append和insert時,必須在前面注明要操作的列表。就像上面的例子,我們要操作classmates這個列表,所以必須寫成classmates.append()
或classmates.insert()
,如果不這么寫,計算機就不知道你要往哪個列表中加入元素。
沒有特殊情況的話,推薦使用append()函數添加元素,因為使用append的時候,元素默認加在列表尾部,不會造成其他元素索引值的改變。如果使用insert的話,就像上面的insert(1,'Tom'),在位置1插入'Tom'后,Tom后面所有的元素,索引值都加了一個1,列表中元素越多,受影響的程度越大,因此使用append()函數要比insert()函數更快。
4. 刪除元素
刪除列表中元素的方法有三種
- 使用
del
刪除元素
>>> names = ['Michael', 'Bob', 'Tracy'] #定義列表
>>> del names[1] #使用del 刪除names中的第二個元素
>>> print(names) #打印列表
['Michael', 'Tracy']
del后面需要用索引的方式表明要刪除的元素,也就是上面的例子,names[1]代表names中的第二個元素,使用del即可刪除
- 使用
list.pop()
函數刪除
>>> names = ['Michael', 'Bob', 'Tracy'] #定義列表
>>> names.pop(1) #刪除names中的第二個元素
'Bob'
>>> print(names) #打印列表
['Michael', 'Tracy']
list.pop()
函數與del差不多,都是使用索引值進行刪除,只不過寫法不同。
我們可以發現,執行names.pop(1)
后,python shell打印出了第二個元素的值,也就是我們要刪除的那個值,這是因為pop()
這個函數,是有返回值的,有時候我們需要使用這個值,這個時候就可以用變量存起來。
>>> names = ['Michael', 'Bob', 'Tracy'] #定義列表
>>> a = names.pop(1) #刪除names中的第二個元素,并把它賦值給a
>>> print(names) #打印列表
['Michael', 'Tracy']
>>> print(a) #打印a
Bob
這樣我們就可以通過調用a而使用剛才刪掉的元素了。
- 使用
list.remove()
函數刪除
>>> names = ['Michael', 'Bob', 'Tracy', 'Bob'] #定義列表
>>> names.remove('Bob') #刪除'Bob'
>>> print(names) #打印列表
['Michael', 'Tracy', 'Bob']
list.remove()
函數的作用是刪除第一個匹配的元素,上面的例子中,names這個列表里面,有兩個'Bob',remove函數只刪除了第一個'Bob'。這就是list.remove()
函數的特點。
- 使用
list.clear()
清空列表
list.clear()
可以清空列表,刪除內部所有的元素
>>> names = ['Michael', 'Bob', 'Tracy', 'Bob'] #定義列表
>>> names.clear() #清空列表
>>> print(names) #打印列表
[]
5. 列表的切片
有時候我們想使用列表的前10個元素,或者前n個元素,這時候就應該使用列表的切片。
>>> names = ['Michael', 'Bob', 'Tracy', 'Tom', 'Jack'] #定義列表
>>> print(names[1:3]) #打印names中的第二個元素到第三個元素
['Bob', 'Tracy']
切片和索引類似,都是使用中括號,區別是,索引中的中括號里面只有一個數,而切片不同。切片是切割列表,形成切割下來的部分形成新的列表。
切片:list[start:end:[step=1]]
,這就是切片的表達式,要求start和end兩者必須有一個,step不是可以不指定,不指定的時候默認為1。
切片該怎么理解呢,start就是開始的位置,end就是結束的位置。切片有個特點是“取前不取后”,看上面那個例子可以發現,1作為start,3作為end,1代表第二個元素,3代表第四個元素,列表切片的時候,是不取后面的那個數字對應的元素的,也就是不取第四個元素,所以names[1:3]只取了第二個元素和第三個元素,這就是所謂的取前不取后。
再看下一個例子。
>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #定義列表
>>> print(numbers[:5]) #打印第一個元素的到第五個元素
[0, 1, 2, 3, 4]
>>> print(numbers[0:5]) #同上
[0, 1, 2, 3, 4]
>>> print(numbers[5:]) #打印第六個元素到最后一個元素
[5, 6, 7, 8, 9, 10]
>>> print(numbers[5:len(numbers)]) #同上
[5, 6, 7, 8, 9, 10]
>>> print(numbers[:]) #不設定start和end
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
當不指定start或者end的時候,start默認為0,end默認為最后一個元素的索引值+1,因為“取前不取后”,要想取到最后一個元素,必須加個1才行。
上例中,用len(numbers)
表示了最后一個元素的索引值,因為索引值從0開始,最后一個元素的索引值一定是列表內元素個數-1,根據“取前不取后”,在end位置上的數字應該+1,所以最后就等于len(numbers)
了。
當不設定start和end的時候,就默認取所有的元素了。
>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> print(numbers[::2])
[0, 2, 4, 6, 8, 10]
>>> print(numbers[1::2])
[1, 3, 5, 7, 9]
當加入step,這個選項后,step代表步長,默認為1,設定成2的時候,就是隔一個取一個,設定成3時就是隔兩個取一個。
上例中,第一個切片,start和end均未設定,因此從第一個元素開始,隔一個取一個,得到了所有奇數位置的元素。
第二個切片,start設定為了1,因此取了所有偶數位置的元素。
6. 其他操作
- 組合
使用'+'號可以將兩個列表組合起來。
>>> a = [1, 2, 3] #定義列表
>>> b = ['a', 'b', 'c'] #定義列表
>>> print(a+b) #打印列表a和列表b組合成的新列表
[1, 2, 3, 'a', 'b', 'c']
- 重復
使用'*'號進行重復,后面寫上重復次數,如下:
>>> a = ['a', 'b'] #定義列表
>>> print(a*3) #打印列表a重復3次的新列表
['a', 'b', 'a', 'b', 'a', 'b']
- 求最大值與最小值
最大值和最小值分別使用max(list)
和min(list)
。
>>> a = [1, 2, 3] #定義列表
>>> print(max(a)) #打印最大值
3
>>> print(min(a)) #打印最小值
1
- 求和
使用sum(list)
進行求和
>>> a = [1, 2, 3]
>>> print(sum(a))
6
- 統計某元素出現次數
使用list.count()
函數可以統計某元素在列表中出現的次數。
>>> a = [1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> print(a.count(2))
3
- 排序
使用list.sort()
函數可以對原來的列表進行從小到大排序。
>>> a = [5, 3, 2, 5, 7, 1]
>>> a.sort()
>>> print(a)
[1, 2, 3, 5, 5, 7]
- 反轉
使用list.reverse()
函數可以將列表中的元素反向排練。
>>> a = [1, 2, 3, 5, 5, 7]
>>> a.reverse()
>>> print(a)
[7, 5, 5, 3, 2, 1]
- 判斷某元素是否在列表內
使用in可以判斷某元素是否在列表內,in是“在……中”的含義
>>> a = [1, 2, 3, 5, 5, 7]
>>> print(3 in a)
True
>>> print(0 in a)
False
3在列表中,0不在列表中,所以3 in a
是True,而0 in a
是False
- 復制
有些時候,我們想再創建出一個和現有列表一模一樣的列表,這時候應該使用list.copy()
函數
>>> a = [1, 2, 3, 5, 5, 7]
>>> b = a.copy()
>>> print(b)
[1, 2, 3, 5, 5, 7]
更多關于列表的信息可以通過使用help(list)
查看幫助文檔。