1. 概念
- 有序的哀墓,可變的集合:可以放不同類型元素
- list = [1, True, “name”, [2, 3, 4]]
2. 定義
2.1 列表生成式
* range(stop):[0, 1, 2, … , stop -1]
* range(start, stop[,step]):[start, start + step, start + 2*step … , stop-1]佳吞,step 默認值為1
2.2 列表推導(dǎo)式
[表達式 for 變量 in 列表]
[表達式 for 變量 in 列表 if 條件]
-
[表達式 for 變量 in 列表 for 變量2 in 列表2]:循環(huán)嵌套
* nums = [1, 2, 3, 4, 5] * resultList = [num ** 2 for num in nums] => [1, 4, 9, 16, 25] * resultList = [num ** 2 for num in nums if num % 2 != 0] => [1, 9, 25] * resultList = [num ** 2 for num in nums for num2 in nums] => [1,1,1,1,1,4,4,4,4,4,9,9,9,9,9,16,16,16,16,16,25,25,25,25,25]
2.3 注意點
* python3 在真正使用前不會立即生成 list
3. 操作
3.1 增
* .append(object)
* .insert(index, object)
* .extend(iterable):往列表中, 擴展另外一個可迭代序列。和append之間的區(qū)別:extend可以算是兩個集合的拼接皆疹,append是把一個元素, 追加到一個集合中
* 乘法:["a"] * 3 =》['a', 'a', 'a']
* 加法:["a"] + ["b", “c”] =》 ["a", "b", "c"] :和extend區(qū)別,只能列表類型和列表類型相加
3.2 刪
-
del 語句
* del nums:可以刪除一個指定元素(對象) * 可以刪除整個列表缩幸, 刪除一個變量髓堪,也可以刪除某個元素
-
pop
* 移除并返回列表中指定索引對應(yīng)元素,返回被刪除的元素 * l.pop(index=-1)
-
remove
* 移除列表中指定元素 * l.remove(object)
-
注意
* 會直接修改原數(shù)組 * 如果元素不存在搞坝,會報錯 * 若果存在多個元素丈牢,則只會刪除最左邊一個 * 注意循環(huán)內(nèi)刪除列表元素帶來的坑
3.3 改
- names[index] = 666
3.4 查
- 獲取單個元素
- num = nums[3] 或 num = nums[-1] 最后一個元素 或 num = nums[-2]倒數(shù)第二個
* 獲取元素索引,index(object)
* 都是從左到右判斷瞄沙,一旦 object 相等,則輸出該 object 的索引
* 注意有多個相同的 object 的列表 獲取相同 index 坑
獲取指定元素個數(shù)慌核,count(object)
-
獲取多個元素
* 也就是切片距境,與字符串切片同理 * pic = nums[1:3:] * pic = nums[::-1]:反轉(zhuǎn)數(shù)組
3.4 遍歷
-
普通對象遍歷
* for num in nums: * 獲取索引不容易,需要自己添加一個計算變量進行自增計算
-
自造索引遍歷
* for index in range(len(list)): * 方便獲取索引垮卓,通過索引獲取元素 nums[index]t
-
通過枚舉對象
* enumerate(sequence[, start = 0]), 拆成多個元祖的集合垫桂,然后對單個元祖解包 * for idx, val in enumerate(values): * for idx, val in enumerate(values, 3):
-
使用迭代器遍歷
* 迭代器 * 迭代 * 訪問集合的一種方式 * 按照某種順序逐個訪問集合中的每一項 * 可迭代對象
3.5 判斷
-
能作用于 for in
* 判斷方法 * import collections * isinstance(obj, collections.Iterable)
3.6 比較
in / not in
-
cmp(objc1, objc2 ),內(nèi)建函數(shù)粟按,python3后廢棄
* objc1 < objc2 結(jié)果 -1 * objc1 == objc2 結(jié)果 0 * objc1 > objc2 結(jié)果 1
python3 使用 >诬滩,<,== 進行比較
以上比較都是從左到右逐一比較的灭将,即“ac” > “ab”疼鸟,[1, 2, 4] > [1, 3, 6]
兩邊比較對象個數(shù)可以不等 [2, 4] > [2, 3, 5]
3.7 排序
-
sorted(iterable, key = None, reverse = False)
* 內(nèi)建函數(shù),可以對所有可迭代對象進行排序 * 返回值時一個排序好的列表 * 原對象不改變 * s = [("sz", 18), ("sz2", 16), ("sz1", 17), ("sz3", 15) * def getKey(x): * return x[1] * result = sorted(s, key=getKey, reverse=True):以元組第一個值為 key庙曙,降序排列 * print(result)
-
列表對象方法:list.sort(key = None, reverse = False)
* 原對象被改變空镜,方法沒有返回值
3.8 亂序
* 無返回值,直接修改 list
* import random
* list = [1, 2, 3, 4, 5]
* random.shuffle(l)
3.9 反轉(zhuǎn)
-
list.reverse()
* 無返回值,直接修改 list * 使用吴攒,切片反轉(zhuǎn)
-
list[::-1]
* 有返回值张抄,原列表不變
4 迭代器
4.1 作用
- 是可以記錄遍歷位置的對象
- 從第一個元素開始,往后通過 next()函數(shù)洼怔,進行遍歷
- 只能往后署惯,不能往前
4.2 注意
- 迭代器也是可迭代對象,所以也可以作用于 for in
4.3 使用迭代器優(yōu)點
-
僅在迭代到該元素時才處理
* 在此之前镣隶,元素可以不存在 * 在此之后极谊,元素可以被銷毀 * 特別適合用于遍歷一些巨大的或無限的集合 - 菲波那切數(shù)列
-
提供了統(tǒng)一的訪問集合接口
* 可以把所有的可迭代對象,轉(zhuǎn)換成迭代器進行使用 * iter(Iterable) * iter(str) * iter(list) * iter(tuple) * iter(dict)
4.4 迭代器使用
- 使用 next()函數(shù)矾缓,從迭代器中獲取下一個對象怀酷,從第一個元素開始,迭>代完后再調(diào)用 next 函數(shù)會報錯說嗜闻,迭代結(jié)束
- 因為迭代器比較常見蜕依,所以 python 中,可以直接作用于 for in
- 內(nèi)部會自動調(diào)用迭代器對象的 next()函數(shù)
- 會自動處理迭代完畢的錯誤
4.5 注意
- 迭代器一般不能迭代多次
- 迭代完畢后琉雳,再取值样眠,會報錯 - StopIteration