1. 程式人生 > 實用技巧 >四、Python基本資料型別四:列表型別

四、Python基本資料型別四:列表型別

·列表是Python中內建有序、可變序列,列表的所有元素放在一對中括號“[]”中,並使用逗號分隔開

·當列表元素增加或刪除時,列表物件自動進行擴充套件或收縮記憶體,保證元素之間沒有縫隙

·在Python中,一個列表中的資料型別可以各不相同,可以同時分別為整數、實數、字串等基本型別,甚至是列表、元組、字典、集合以及其他自定義型別的物件

1、列表的建立與刪除

·使用方括號[]直接建立

list_a = ["String", 1, 'a', [1, 'b', 3]]
list_b = []  #建立空列表
print(list_a, '
\n', list_b) ''' 輸出結果: ['String', 1, 'a', [1, 'b', 3]] [] '''

·使用list()函式建立

list_a = list(range(1, 26, 3))
list_b = list((1, 'a', "abc"))
list_c = list()  #建立空列表
list_d = list('Hello World')
print(list_a, '\n', list_b, '\n', list_c, '\n', list_d)
'''
輸出結果:
[1, 4, 7, 10, 13, 16, 19, 22, 25] 
[1, 'a', 'abc'] 
[] 
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
'''

·使用del命令刪除整個列表,如果列表物件所指向的值不再有其他物件指向,Python將同時刪除該值。

del list_a
list_a
'''
輸出結果:
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    list_a
NameError: name 'list_a' is not defined
'''

2、列表元素的增加

(1)使用‘+’運算子

list_a = [1, 2, 3]
list_a = list_a + [5]
print(list_a, '\n', list_b)
''' 輸出結果:
[1, 2, 3]
[1, 2, 3, 5]
'''

·該方法建立了一個新列表,並將原列表中的元素和新元素依次複製到新列表的記憶體,由於涉及元素的複製,該操作速度較慢

(2)使用append(a)方法

list_a = list('Hello')
list_a.append('!')
list_a
'''
輸出結果:
['H', 'e', 'l', 'l', 'o', '!']
'''

·append()實現的是在特定的列表最後新增一個元素,並且一次只能在列表最後新增一個元素。該方法為原地修改,即直接修改原列表,不產生新的列表,速度較快

(3)使用extend(a, b…)方法

list_a = [1, 2, 3]
list_a.extend('a', 4, 'abc')
'''
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    list_a.extend('a', 4, 'abc')
TypeError: extend() takes exactly one argument (3 given)
'''
list_a.extend(['a', 4, 'abc'])
list_a
'''
輸出結果:
[1, 2, 3, 'a', 4, 'abc']
'''

·extend()實現的是對於特定列表的擴充套件和增長,可以在列表的最後一次性新增多個元素,該方法為原地修改,不產生新的列表

(4)使用insert(a, b)方法

list_a = ['a', 1, 2, 'b']
list_a.insert(3, 3)
list_a
'''
輸出結果:
['a', 1, 2, 3, 'b']
'''

·insert(a, b)實現的是在列表的指定位置a處插入元素b,但由於列表的自動記憶體管理功能,insert()方法會引起插入位置之後所有元素的移動,這會影響處理速度

(5)使用‘*’方法

list_a = [[1, 2, 3] * 2] * 3
list_a
'''
[[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]]
'''
list_a[0][0] = 'a'
list_a
'''
[['a', 2, 3, 1, 2, 3], ['a', 2, 3, 1, 2, 3], ['a', 2, 3, 1, 2, 3]]
'''

·當使用*運算子將包含列表的列表重複並建立新列表時,並不是複製子列表值,而是複製已有元素的引用。因此,當修改其中一個值時,相應的引用也會被修改

3、列表元素的刪除

(1)使用del m[n]方法

list_a = [1, 2, 3, 4]
del list_a[1]
list_a
#[1, 3, 4]

·刪除列表m指定位置n上的元素

(2)使用pop(n)方法

list_a = [1, 2, 3, 4]
list_a.pop()
#4
list_a.pop(0)
#1
list_a
#[2, 3]

·刪除並返回列表指定位置(預設為最後一個)上的元素,如果給定的索引超出了列表的範圍則丟擲異常

(3)使用remove(a)方法

list_a = ['1', 'a', 'b', 1, 2]
list_a.remove('1')
list_a
#['a', 'b', 1, 2]
list_a.remove('1')
'''
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    list_a.remove('1')
ValueError: list.remove(x): x not in list
'''

·刪除首次出現的指定元素,如果列表中不存在要刪除的元素,則丟擲異常

4、列表元素的訪問

(1)使用下標直接訪問,如果指定下標不存在,則丟擲異常

(2)使用index()方法獲取指定元素首次出現的下標,若列表物件中不存在指定元素,則丟擲異常

list_a = [[1, 2, 3] * 2] * 3
list_a.index(3)
'''
Traceback (most recent call last):
  File "<pyshell#61>", line 1, in <module>
    list_a.index(3)
ValueError: 3 is not in list
'''
list_a = [1, 2, 3, 4, 'a', 'b']
list_a.index(3)
#2

(3)使用count()方法統計指定元素在列表物件中出現的次數

list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3]
list_a.count(2)
#3
list_a.count(0)
#0

(4)使用in關鍵字來判斷一個值是否存在於列表中,返回結果為“True”或“False

list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3]
4 in list_a
#False
3 in list_a
#True
0 not in list_a
#True

5、列表切片

(1)列表切片就是指將列表裡面的一些列元素(不僅僅是某一個元素)進行獲取或者得到

(2)M = N[A:B:C]表示將N列表裡從索引號位置為A開始的元素到B-1處且步長為C的元素的列表獲取賦給M

list_a = [1, 2, 3, 5, 3, 2, 6, 4.3, 2, 3]
list_b = list_a[0:6:2]
list_b
#[1, 3, 3]

(3)切片操作不會因為下標越界而丟擲異常,而是簡單地在列表尾部截斷或者返回一個空列表,程式碼具有更強的健壯性

list_a = [1, 2, 3]
list_b = list_a[2:6]
list_b
#[3]

(4)使用切片修改列表元素

·在尾部追加元素

list_a = [1, 2, 3]
list_a[len(list_a) : ] = [0]
list_a
#[1, 2, 3, 0]

·替換元素

list_a = [1, 2, 3, 4, 5, 6]
list_a[1:4] = ['a', 'b', 'c']
list_a
#[1, 'a', 'b', 'c', 5, 6]

·刪除元素

list_a = [1, 2, 3, 4, 5, 6]
list_a[1:5] = []
list_a
#[1, 6]

·與del結合刪除元素

list_a = [1, 2, 3, 4, 5, 6]
del list_a[1:5]
list_a
#[1, 6]

(5)淺拷貝

(5)深拷貝

6、列表推導式

aList = [x*x for x in range(10)]
相當於
>>> aList = []
>>> for x in range(10):
aList.append(x*x)
也相當於
aList = list(map(lambda x: x*x, range(10)))

7、列表函式&方法

序號

函式

1

cmp(list1, list2)
比較兩個列表的元素

2

len(list)
列表元素個數

3

max(list)
返回列表元素最大值

4

min(list)
返回列表元素最小值

5

list(seq)
將元組轉換為列表

6

list.append(obj)
在列表末尾新增新的物件

7

list.count(obj)
統計某個元素在列表中出現的次數

8

list.extend(seq)
在列表末尾一次性追加另一個序列中的多個值(用新列表擴充套件原來的列表)

9

list.index(obj)
從列表中找出某個值第一個匹配項的索引位置

10

list.insert(index, obj)
將物件插入列表

11

list.pop([index=-1])
移除列表中的一個元素(預設最後一個元素),並且返回該元素的值

12

list.remove(obj)
移除列表中某個值的第一個匹配項

13

list.reverse()
反向列表中元素

14

list.sort(cmp=None, key=None, reverse=False)
對原列表進行排序