列表: 有序的可變的元素集合
定義:
-
方式1
[元素1, 元素2, 元素3...]
例如: [1, 2, 3, 4, 5]
-
方式2
- 列表生成式: 快速生成list
- 語法1:
range(stop), 取值范圍[0, stop)
- 語法2:
range(start, stop, step)
- 語法1:
list = range(10) # 取值: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
list = range(2, 10) # 取值: 2, 3, 4, 5, 6, 7, 8, 9
list = range(2, 10, 2) # 取值: 2, 4, 6, 8
注意: 為了防止生成的列表沒有被使用, python3做了一些改變, 不會立即生成列表
* 列表推導(dǎo)式: 從一個list快速推導(dǎo)出另一個list
* 概念:映射解析--一對一變更, 過濾--從多到少
* 語法:[表達(dá)式 for 變量 in 列表]
饼问、[表達(dá)式 for 變量 in 列表 if 條件]
```
# [表達(dá)式 for 變量 in 列表]
list = [num ** 2 for num in range(10)]
print(list)
# 打印: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]list = [fillcar for fillcar in "abcdefg"]
print(list)打印: ['a', 'b', 'c', 'd', 'e', 'f', 'g']
[表達(dá)式 for 變量 in 列表 if 條件]
list = [num ** 2 for num in range(10) if num % 2 == 0]
print(list)打印: [0, 4, 16, 36, 64]
- 列表生成式: 快速生成list
列表的嵌套: 列表中的元素, 還可以是列表
列表中可以存放不同類型的數(shù)據(jù)
list = [1, "2", 3, 4.0, "5"]
print(list)
# 打印: [1, '2', 3, 4.0, '5']
常用操作
增航厚、刪亥鬓、改、查欣簇、額外操作(判定、比較掀泳、排序况既、亂序、反轉(zhuǎn))
-
增: 在列表中添加新的元素
-
append(object)
: 在列表的最后添加一個新的元素- 沒有返回值, 會改變原列表
list = [1, 2, 3, 4] list.append(5) print(list) # 打印: [1, 2, 3, 4, 5]
-
insert(index, object)
: 在列表中指定索引前插入一個元素- 沒有返回值, 會改變原列表
- 可以往空數(shù)組中插入元素
# 插入到列表的指定位置 list = [1, 2, 3, 4] list.insert(0, 5) print(list) # 打印: [5, 1, 2, 3, 4]
# 空列表中插入元素 list = [] list.insert(0, 5) print(list) # 打印: [5]
# 插入到列表的最后位置 list = [1, 2, 3, 4] list.insert(4, 5) print(list)
-
extend(iterable)
: 往列表中, 擴(kuò)展另一個可迭代序列- 沒有返回值, 會改變原列表
# 擴(kuò)展一個數(shù)組 list1 = [1, 2, 3] list2 = ["a", "b", "c"] list1.extend(list2) print(list1) # 打印: [1, 2, 3, 'a', 'b', 'c']
# 擴(kuò)展一個字符串 list = [1, 2, 3] str = "abcdefg" list.extend(str) print(list) # 打印: [1, 2, 3, 'a', 'b', 'c', 'd', 'e', 'f', 'g']
- 列表乘法
- 不會改變原列表, 只能是列表與整數(shù)相乘
list = [1, 2, 3] print(list * 3) # 打印: [1, 2, 3, 1, 2, 3, 1, 2, 3]
- 列表加法
- 將兩個列表的元素放到一個新的列表中, 原列表不變
- 只能是兩個列表相加
list1 = [1, 2, 3] list2 = ["a", "b", "c"] print(list1 + list2) # 打印: [1, 2, 3, 'a', 'b', 'c']
-
-
刪: 移除列表中的某個元素
-
del語句
: 刪除列表中的元素, 也可以刪除變量
# 刪除元素 num = [1, 2, 3, 4, 5] del num[1] print(num) # 打印: [1, 3, 4, 5]
# 刪除元素 num = [1, 2, 3, 4, 5] del num print(num) # 報錯: NameError: name 'num' is not defined
-
pop(index=-1)
: 刪除指定索引的元素, 并將該元素做為返回值-
index
: 指定索引, 默認(rèn)為-1 - 會將
index
指定的元素返回 - 下標(biāo)不能越界, 否則報錯
-
# 刪除默認(rèn)元素 list = [1, 2, 3, 4, 5] result = list.pop() print(result, list) # 打印: 5 [1, 2, 3, 4]
# 刪除指定元素 list = [1, 2, 3, 4, 5] result = list.pop(1) print(result, list) # 打印: 2 [1, 3, 4, 5]
-
remove(object)
: 刪除列表中指定元素- 如果列表中存在多個相同元素, 則只會刪除最左邊的一個
- 只能刪除列表中有的元素, 否則報錯
# 刪除指定元素 list = [1, 2, 3, 4, 5] list.remove(2) print(list) # 打印: [1, 3, 4, 5]
# 當(dāng)存在多個指定元素時, 只會刪除最左邊的一個 list = [1, 2, 3, 2, 4, 5, 2] list.remove(2) print(list) # 打印: [1, 3, 2, 4, 5, 2]
# 刪除列表中不存在的元素, 會報錯 list = [1, 2, 3, 4, 5] list.remove(6) print(list) # 報錯: ValueError: list.remove(x): x not in list
-
-
改
-
列表[lindex] = 值
: 修改列表中指定索引的元素-
index
: 元素索引, 且不能越界 -
index
: 可以為負(fù)數(shù), 即從后往前數(shù)
-
# 修改列表中指定索引的元素 list = [1, 2, 3, 4, 5] list[2] = 6 print(list) # 打印: [1, 2, 6, 4, 5]
# 索引越界會報錯 list = [1, 2, 3, 4, 5] list[5] = 6 # 報錯: IndexError: list assignment index out of range
# 索引為負(fù)數(shù) list = [1, 2, 3, 4, 5] list[-2] = 6 print(list) # 打印: [1, 2, 3, 6, 5]
-
-
查
-
列表[index]
:獲取單個元素-
index
: 元素索引, 可以為負(fù)數(shù), 負(fù)數(shù)時從后向前 -
index
: 不可以越界
-
# 獲取指定索引的元素 list = [2, 3, 4, 5, 6] print(list[2]) # 打印: 4
# 索引為負(fù)數(shù)的情況 list = [2, 3, 4, 5, 6] print(list[-2]) # 打印: 5
# 索引越界報錯 list = [2, 3, 4, 5, 6] print(list[6]) # 報錯: IndexError: list index out of range
-
index(object, start=0, end=len(list))
: 獲取元素的索引, 范圍[start, end)
-
object
: 需要查找索引的元素 -
start
: 查找的索引起點, 默認(rèn)值為0
-
end
: 查找索引的終點, 默認(rèn)值為len(list)
- 當(dāng)列表中有多個相同的指定元素時, 會默認(rèn)返回第一個該元素的下標(biāo)
- 不能查找列表中沒有的元素, 否則報錯
-
# 查找指定索引 list = [2, 3, 4, 5, 6] index = list.index(5) print(index) # 打印: 3
# 查找不存在的元素, 報錯 list = [2, 3, 4, 5, 6] index = list.index(7) print(index) # 報錯: ValueError: 7 is not in list
-
count(object)
: 查找指定元素個數(shù)-
object
: 指定的元素
-
list = [2, 3, 4, 5, 6, 5] count = list.count(5) print(count) # 打印: 2
-
列表[start=0:end=len(list):step]
: 獲取多個元素, 切片操作, 范圍[start:end)
-
step
: 步長, 默認(rèn)1
, 正數(shù)正取, 負(fù)數(shù)倒取 -
setp
: 正數(shù)時,start
對應(yīng)元素必須在列表中位于end
對應(yīng)元素的前方 -
setp
: 負(fù)數(shù)時,start
對應(yīng)元素必須在列表中位于end
對應(yīng)元素的后方 - 反轉(zhuǎn)字符串:
列表[::-1]
-
# 正取 list = [2, 3, 4, 5, 6, 5] print(list[1:4]) # 打印: [3, 4, 5]
# 倒取 list = [2, 3, 4, 5, 6, 5] print(list[-1:1:-1]) # 打印: [5, 6, 5, 4]
# 反轉(zhuǎn) list = [2, 3, 4, 5, 6, 5] print(list[::-1]) # 打印: [5, 6, 5, 4, 3, 2]
-
-
遍歷:
- 方式一: 根據(jù)元素進(jìn)行遍歷
list = ["a", "b", "c", "d", "e"] for object in list: print(object, end=" ") # 打印: a b c d e
- 方式二: 根據(jù)索引進(jìn)行遍歷
list = ["a", "b", "c", "d", "e"] for i in range(len(list)): print(list[i], end=" ") # 打印: a b c d e
- 方式三: 根據(jù)每句對象進(jìn)行遍歷
enumerate(sequence, [start=0])
-
sequence
: 一個序列, 迭代器, 或其他支持迭代器的對象
# 使用enumerate(sequence, [start=0])獲取枚舉對象 list = ["a", "b", "c"] print(enumerate(list)) # 打印: <enumerate object at 0x101cb4ea0>
# 遍歷枚舉對象, 打印出的是元組 list = ["a", "b", "c"] for e in enumerate(list): print(e, end = " ") # 打印: (0, 'a') (1, 'b') (2, 'c')
# 通過元素獲取列表中元素的下標(biāo)和元素本身 list = ["a", "b", "c"] for index, value in enumerate(list): print(index, value) # 打印: 0 a 1 b 2 c
-
判定:
-
元素 in 列表
: 判定列表中是否包含該元素
list = [1, 2, 3] print(1 in list) # 打印: True print(5 in list) # 打印: False
-
元素 not in 列表
: 判定列表中是否不包含該元素
list = [1, 2, 3] print(1 not in list) # 打印: False print(5 not in list) # 打印: True
-
-
比較
- Python2: 使用內(nèi)置函數(shù)
cmp(列表1, 列表2)
: 從左到右, 逐個元素比較- 注意:
cmp
函數(shù)只有存在與Python2中 - 返回值: 如果
列表1
小于列表2
, 返回-1
, 等于返回0
, 大于返回1
- 注意:
list1 = [1, 2] list2 = [1, 2, 3] print(cmp(list1, list2)) # 打印: -1
- Python3: 使用比較運算符
== > <
, 從左到右, 逐個元素比較- 比較結(jié)果是布爾值
list1 = [1, 2] list2 = [1, 2, 3] print(list1 == list2) # 打印: False
- Python2: 使用內(nèi)置函數(shù)
-
排序
- 方式一:
sorted(itrearble, key=None, reverse=False)
- 內(nèi)置函數(shù), 可以對任何可迭代對象進(jìn)行排序
-
itrearble
: 可迭代對象 -
key
: 函數(shù), 該函數(shù)只有一個返回值,sorted
函數(shù)會用這個值來排序 -
reverse
: 是否降序排列, 默認(rèn)False
- 返回值: 排序好的新列表
- 原列表不變
# 排序數(shù)組 list = [1, 6, 2, 4, 3, 9, 5] result = sorted(list, reverse=True) print(result) # 打印: [9, 6, 5, 4, 3, 2, 1]
# 排序元組數(shù)組, 默認(rèn)使用每個元組中的第一個元素進(jìn)行比較 list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")] resilt = sorted(list, reverse=True) print(result) # 打印: [(4, 'd'), (3, 'a'), (2, 'c'), (1, 'd')]
# 排序元組數(shù)組, 使用key指定排序的對象是哪一個 def getKey(x): return x[1] list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")] resilt = sorted(list, key=getKey, reverse=False) print(resilt) # 打印: [(3, 'a'), (2, 'c'), (1, 'd'), (4, 'd')]
- 方式二:
sort(key=None, reverse=False)
- 功能與
sorted(itrearble, key=None, reverse=False)
相同 - 沒有返回值
- 唯一不同:
sort
是對象方法, 改變列表本身,sorted
是內(nèi)置函數(shù), 不改變列表本身
- 功能與
# 排序元組數(shù)組, 使用key指定排序的對象是哪一個 def getKey(x): return x[1] list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")] list.sort(key=getKey, reverse=False) print(list) # 打印: [(3, 'a'), (2, 'c'), (1, 'd'), (4, 'd')]
- 方式一:
-
亂序
- 使用
random
庫中的函數(shù)shuffle(list)
, 對列表進(jìn)行隨機(jī)亂序操作random.shuffle(list)
- 沒有返回值
- 改變原列表
import random list = [1, 2, 3, 4, 5] random.shuffle(list) print(list) # 打印: [3, 4, 2, 5, 1]
- 使用
-
反轉(zhuǎn)
-
list.reverse()
: 反轉(zhuǎn)列表元素- 沒有返回值
- 改變原列表
list = [1, 2, 3, 4, 5] list.reverse() print(list) # 打印: [5, 4, 3, 2, 1]
-
list[::-1]
: 反轉(zhuǎn)列表元素- 返回值: 反轉(zhuǎn)后的新列表
- 原列表不變
list = [1, 2, 3, 4, 5] print(list[::-1]) # 打印: [5, 4, 3, 2, 1]
-