列表(List)是 Python 中最基本的數據結構,它是一種有序的集合,列表中每個元素都有其對應的位置值(索引)。
創建列表
一般在創建列表時,分為創建空列表和非空列表,其創建方式如下:
# 創建空列表,有兩種方式
list1 = list()
list2 = []
# 創建同一數據類型的列表
list3 = ["a", "b", "c", "d", "e", "f"]
# 創建不同數據類型的列表
list4 = ["a", 2, {}, [1, 3], False, ()]
從上面可以看到,我們只需要把列表的所有元素放在 方括號 []
里面,每個元素之間通過 逗號 ,
間隔起來即可,當然,列表中允許存放不同數據類型的元素。
獲取列表中的元素
- 下標索引取值
列表中的下標索引都是從 0 開始計算,第一個元素索引是 0 ,第二個元素索引是 1 ,以此類推。
>>> books = ["語文", "數學", "英語", "歷史", "物理", "化學"]
>>>
>>> books[0]
'語文'
>>> books[5]
'化學'
另外,我們也可以從列表尾部開始計算索引,此時最后一個元素索引為 -1,倒數第二個元素索引為 -2 ,以此類推即可。當我們需獲取列表最后一個元素,但又不知道列表長度時,可以通過該方式快速獲取。
>>> books = ["語文", "數學", "英語", "歷史", "物理", "化學"]
>>>
>>> books[-1]
'化學'
>>> books[-2]
'物理'
>>> books[-6]
'語文'
>>>
>>> books[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
如果設置的索引不存在,那么會報錯:IndexError: list index out of range
- 切片取值
列表中切片的語法為:列表[start:end:step]
,通過切片可以獲取到列表中指定范圍的元素。在這里,需要注意切片的規則是左閉右開,也就是說包含頭部 start,但不包含尾部 end ,而 step 則表示切片的步長,需要每間隔 step 個元素取一次。
>>> books = ["語文", "數學", "英語", "歷史", "物理", "化學"]
>>>
>>> books[1:4:2] # 從第2個到第4個元素,每間隔2個元素取值
['數學', '歷史']
>>> books[1::2] # 從第2個到列表末尾,每間隔2個元素取值
['數學', '歷史', '化學']
>>> books[1:4] # 獲取從第2個到第4個的所有元素
['數學', '英語', '歷史']
>>> books[:] # 獲取全部元素
['語文', '數學', '英語', '歷史', '物理', '化學']
列表切片時,我們可以設置切片的步長為負值,比如設置 step = -1,那么我們就可以逆序獲取列表的元素。
>>> books[::-1] # 逆序獲取全部元素,即反轉列表
['化學', '物理', '歷史', '英語', '數學', '語文']
更新列表
在對列表進行更新操作時,我們可以根據索引對列表的元素進行修改或更新,也可以使用 append() 或 insert()
方法來添加元素。
- 通過下標索引更新列表
>>> books = ["語文", "數學", "英語", "歷史", "物理", "化學"]
>>>
>>> books[1] = "地理"
>>> print(books)
['語文', '地理', '英語', '歷史', '物理', '化學']
當然,我們也可以通過切片賦值的方式來更新列表。
>>> books[2:4] = ["英語222", "歷史222"]
>>> print(books)
['語文', '地理', '英語222', '歷史222', '物理', '化學']
>>>
>>> books[2:4] = 1234
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
需注意的是,通過切片方式賦值的值必須是可迭代對象(比如列表、元組等),否則會出現報錯:TypeError: can only assign an iterable
- 通過 append() 在列表末尾添加新對象
>>> books = ["語文", "數學", "英語", "歷史", "物理", "化學"]
>>>
>>> books.append("地理")
>>> print(books)
['語文', '數學', '英語', '歷史', '物理', '化學', '地理']
>>>
>>> books.append(6666)
>>> print(books)
['語文', '數學', '英語', '歷史', '物理', '化學', '地理', 6666]
- 通過 insert() 在指定位置插入新對象
>>> books = ["語文", "數學", "英語", "歷史", "物理", "化學"]
>>>
>>> books.insert(1, "地理")
>>> print(books)
['語文', '地理', '數學', '英語', '歷史', '物理', '化學']
刪除列表中的元素
在對列表進行刪除操作時,我們可以根據索引刪除對應位置的元素,也可以根據元素本身的值進行刪除,當然,還可以直接清空整個列表。
- 通過 del 刪除指定索引下的元素
>>> books = ["語文", "數學", "英語", "歷史", "數學", "物理", "數學"]
>>>
>>> del books[1] # 刪除第 2 個元素
>>> print(books)
['語文', '英語', '歷史', '數學', '物理', '數學']
>>>
>>> del books[1:4] # 刪除第 2 個到第 4 個的所有元素
>>> print(books)
['語文', '物理', '數學']
如果要刪除列表的索引不存在,那么會出現報錯,如下:
>>> del books[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
- 通過 pop() 刪除指定索引下的元素,會返回刪除的元素
>>> books = ["語文", "數學", "英語", "歷史", "數學", "物理", "數學"]
>>>
>>> books.pop() # 默認刪除列表最后一個元素
'數學'
>>> print(books)
['語文', '數學', '英語', '歷史', '數學', '物理']
>>>
>>> books.pop(3) # 刪除列表指定索引下的元素
'歷史'
>>> print(books)
['語文', '數學', '英語', '數學', '物理']
如果要刪除列表的索引不存在,那么會出現報錯,如下:
>>> books.pop(100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
- 通過 remove() 刪除指定元素,只會刪除匹配的第一個元素
>>> books = ["語文", "數學", "英語", "歷史", "數學", "物理", "數學"]
>>>
>>> books.remove("數學")
>>> print(books)
['語文', '英語', '歷史', '數學', '物理', '數學']
如果要刪除列表的對象不存在,那么會出現報錯,如下:
>>> books.remove("美術")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
- 通過 clear() 刪除列表所有元素
>>> books = ["語文", "數學", "英語", "歷史", "數學", "物理", "數學"]
>>>
>>> books.clear()
>>>
>>> print(books)
[]
列表運算操作符
- 運算符 + ,用於組合拼接列表
>>> list1 = [1, 3, 5]
>>> list2 = [2, 4, 6]
>>>
>>> print(list1 + list2)
[1, 3, 5, 2, 4, 6]
- 運算符 * ,用於重復列表
>>> name = ["hello", "word"]
>>>
>>> print(name * 3)
['hello', 'word', 'hello', 'word', 'hello', 'word']
- 關鍵字 in
通過關鍵字 in
,可檢查當前列表中是否包含指定元素,返回結果為布爾值 True 或 False。
>>> list3 = [1, 2, 3]
>>>
>>> print(2 in list3)
True
>>>
>>> print(6 in list3)
False
通過關鍵字 in
,還可以用於遍歷當前列表。
books = ["語文", "數學", "英語", "歷史", "物理", "化學"]
for i in books:
print(i, end=" ")
列表函數&方法
函數 & 方法 | 描述 |
---|---|
len(list) | 返回列表元素個數 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(iterable) | 將可迭代對象轉換為列表,若 iterable 為空則創建空列表 |
list.append(obj) | 在列表末尾添加新的對象 |
list.count(obj) | 統計某個元素在列表中出現的次數 |
list.extend(seq) | 在列表末尾一次性追加另一個序列中的多個值 |
list.index(obj) | 從列表中找出某個元素第一次出現的索引位置 |
list.insert(index, obj) | 將對象插入到列表指定索引位置 |
list.pop(index) | 刪除並返回列表中的一個元素(默認最后一個元素) |
list.remove(obj) | 刪除列表中某個值(只刪除第一個匹配項) |
list.reverse() | 反向列表中元素 |
list.sort() | 對原列表進行排序 |
list.clear() | 清空列表 |
list.copy() | 復制列表,相當於 list[:] ,使用的是淺拷貝 |