什麼是列表
- 列表是一個有序的序列
- 列表中所有的元素放在 [ ] 中間,並用逗號分開
- 一個 列表 可以包含不同型別的元素,但通常使用時各個元素型別相同
特徵
佔用空間小,浪費記憶體空間少
宣告列表變數
- 列表元素可以是任意資料型別,也可以混搭
- 可以陣列巢狀陣列,俗稱二元陣列
lis = [1, 2, 3, 1.11] lis = ["a", "b", "c"] lis = [True, False] lis = [{"a": 123}, {"b": 456}] lis = [[1], [2]] lis = [(1), (2)] lis = [1, 1.2, "2", True, {}, [], ()]
列表常見運算操作
運算子 +
# + 運算 a = [1] + [2, 3, ] + [4, 5] print(a) b = [1, 2] + ["3", "4"] print(b)
# 輸出結果 [1, 2, 3, 4, 5] [1, 2, '3', '4']
- 變數 b 是賦值兩個不同資料型別的列表,雖然不會報錯,但是 pycharm 會有 warning
- Expected type 'List[int]' (matched generic type 'List[_T]'), got 'List[str]' instead
- 本來應該是 List[int],但後面用了 List[str] 代替,不過我也沒 get 到這個 warn 想幹嘛哈哈
運算子 *
# * 運算 a = [1, 2] * 3 print(a)
# 輸出結果 [1, 2, 1, 2, 1, 2]
索引(下標)取值
# 索引 a = [1, 2, True, {"name": "小菠蘿"}, ["how", "hi"]] print(a[0]) print(a[2]) print(a[-1]) print(a[-2]) # 輸出結果 1 True ['how', 'hi'] {'name': '小菠蘿'}
切片取值
- 和字串一樣,列表也可以切片
- 使用語法:列表[start : end : step],獲取列表 列表 中在 [start, end) 範圍的子字串
- 注意範圍 [start, end) 包含 start,不包含 end
- step 是步長,設為 n,則每隔 n 個元素獲取一次
# 切片 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] print(a[:]) # 取全部 print(a[0:]) # 取第一個元素到最後一個元素 print(a[::-1]) # 逆序取全部元素 print(a[2:5]) # 取第三個元素到第五個元素 # 輸出結果 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] [0, 9, 8, 7, 6, 5, 4, 3, 2, 1] [3, 4, 5]
切片賦值
注意:賦值的值也必須是列表,否則會報錯 TypeError: can only assign an iterable
# 切片賦值 a = ["1", "2", "3"] print(a) a[:] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] # 切片獲取所有元素,並重新賦值 print(a) a[2:4] = [33, 44] print(a) a[2:4] = [] # 相當於去掉第 3、4 個元素 print(a) a[:] = [] # 將 a 賦值為空列表 print(a) # 輸出結果 ['1', '2', '3'] [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] [1, 2, 33, 44, 5, 6, 7, 8, 9, 0] [1, 2, 5, 6, 7, 8, 9, 0] []
關鍵字 in
- 通過關鍵字 in 檢查列表中是否包含指定元素,返回 bool 值
- not in 則是取反
# in、not in a = [1, 2, True, {"name": "小菠蘿"}, ["how", "hi"]] print(1 in a) print(3 in a) print({"name": "小菠蘿"} in a) print(False not in a) # 輸出結果 True False True True
列表常見會用上的內建函式
len()
獲取列表長度
# 獲取列表長度 print(len([1, 2, 3, 4])) # 輸出結果 4
max()
獲取列表值最大的元素
最簡單的栗子
# max a = [1, 2, 3] print(max(a)) # 輸出解僱 3
不同資料型別的栗子
# 其他栗子 a = [1, 2, True, 3] print(max(a)) a = ["a", "b", "c"] print(max(a)) a = [[1, 2], [3, 4], [3, 5]] print(max(a)) # 輸出結果 3 c [3, 5]
同一個列表裡包含不同資料型別的話呢?
a = ["a", "b", 1] print(max(a)) # 輸出結果 print(max(a)) TypeError: '>' not supported between instances of 'int' and 'str'
- 很明顯,直接報錯了,提示 > 運算子不支援在 int 、str 兩種資料型別做運用
- 所以,使用 max、min 函式時,列表的資料記得是同一個資料型別哦
傳多個引數的栗子
上面的栗子都是給 max 函式傳遞了單個引數
print(max(1, 2, 3)) print(max([1, 2], [1, 2, 3])) # 輸出結果 3 [1, 2, 3]
會返回最大的那一個引數值
檢視 max() 原始碼
def max(*args, key=None): # known special case of max """ max(iterable, *[, default=obj, key=func]) -> value max(arg1, arg2, *args, *[, key=func]) -> value With a single iterable argument, return its biggest item. The default keyword-only argument specifies an object to return if the provided iterable is empty. With two or more arguments, return the largest argument. """ pass
兩種傳值方式
max(iterable, *[, default=obj, key=func])
倘若只傳一個列表,那麼可以指定 default 引數值,當傳的列表為空的時候,返回 default 值
max(arg1, arg2, *args, *[, key=func])
可以傳多個引數,返回最大的引數值
min()
- 獲取列表值最小的元素
- 跟 max() 就是反過來了,不再舉栗子咯