
一、什么是序列序列Sequence 有序、可按索引訪問的數(shù)據(jù)類型。Python 中常見的序列類型可變語法字符串 str?hello列表 list?[1, 2, 3]元組 tuple?(1, 2, 3)序列通用操作str、list、tuple 都支持s Python lst [1, 2, 3, 4, 5] # 索引 print(s[0], lst[0]) # P 1 # 切片 print(s[0:3], lst[1:4]) # Pyt [2, 3, 4] # 拼接 print([1, 2] [3, 4]) # [1, 2, 3, 4] # 重復(fù) * print([0] * 5) # [0, 0, 0, 0, 0] # 成員檢測 in print(2 in lst) # True # 長度 len print(len(lst)) # 5 # 最大最小 print(max(lst), min(lst))二、列表 List 詳解2.1 列表的特點可變創(chuàng)建后可以修改、添加、刪除元素有序每個元素有固定位置索引元素類型可以不同[1, hello, 3.14, True]2.2 創(chuàng)建列表lst1 [1, 2, 3] lst2 list(abc) # [a, b, c] lst3 list(range(5)) # [0, 1, 2, 3, 4] lst4 [] # 空列表 lst5 [1, hello, 3.14] # 混合類型 nested [[1, 2], [3, 4]] # 嵌套列表2.3 訪問元素fruits [apple, banana, cherry, date] print(fruits[0]) # apple第一個 print(fruits[-1]) # date最后一個 print(fruits[1:3]) # [banana, cherry]切片2.4 修改元素fruits [apple, banana, cherry] # 按索引修改 fruits[0] apricot # 切片賦值可改變長度 fruits[1:2] [blueberry, blackberry] print(fruits) # [apricot, blueberry, blackberry, cherry]2.5 添加元素fruits [apple, banana] fruits.append(cherry) # 末尾添加單個 fruits.insert(1, blueberry) # 指定位置插入 fruits.extend([date, elderberry]) # 末尾批量添加 print(fruits)方法作用append(x)末尾添加一個元素即使 x 是列表也作為整體添加insert(i, x)在索引 i 處插入 xextend(iterable)末尾逐個添加 iterable 中的元素a [1, 2] a.append([3, 4]) # [1, 2, [3, 4]] b [1, 2] b.extend([3, 4]) # [1, 2, 3, 4]2.6 刪除元素fruits [apple, banana, cherry, banana] fruits.remove(banana) # 刪除第一個匹配的值 del fruits[0] # 按索引刪除 popped fruits.pop() # 彈出末尾元素 popped fruits.pop(0) # 彈出指定位置 fruits.clear() # 清空列表2.7 查找與統(tǒng)計nums [3, 1, 4, 1, 5, 9, 2, 6] print(nums.index(4)) # 2第一次出現(xiàn)的索引 print(nums.count(1)) # 2出現(xiàn)次數(shù) print(5 in nums) # True2.8 排序與反轉(zhuǎn)nums [3, 1, 4, 1, 5] nums.sort() # 原地升序nums 本身被改變 nums.sort(reverseTrue) # 原地降序 original [3, 1, 4] sorted_list sorted(original) # 返回新列表original 不變 nums.reverse() # 原地反轉(zhuǎn)sort() vs sorted()sort()sorted()調(diào)用方式列表方法lst.sort()內(nèi)置函數(shù)sorted(lst)是否改變原列表? 改變? 返回新列表2.9 遍歷列表fruits [apple, banana, cherry] # 方式1直接遍歷 for fruit in fruits: print(fruit) # 方式2帶索引 for i, fruit in enumerate(fruits): print(i, fruit) # 0 apple # 1 banana # 2 cherry2.10 列表推導(dǎo)式重點簡潔地創(chuàng)建列表# 基本形式 squares [x ** 2 for x in range(10)] # 帶條件 evens [x for x in range(20) if x % 2 0] # 多重循環(huán) matrix [[i * j for j in range(1, 4)] for i in range(1, 4)] # 從現(xiàn)有列表轉(zhuǎn)換 words [hello, world, python] upper_words [w.upper() for w in words] lengths [len(w) for w in words]2.11 zip() 函數(shù)把多個序列拉鏈合并names [張三, 李四, 王五] scores [85, 92, 78] for name, score in zip(names, scores): print(f{name}: {score}) pairs list(zip(names, scores)) # [(張三, 85), (李四, 92), (王五, 78)]三、列表 vs 字符串特性strlist可變性不可變可變元素類型只能是字符任意類型拼接重復(fù)**四、重點易錯點append vs extendappend 添加整個對象extend 逐個添加remove 找不到會 ValueError切片賦值可改變列表長度列表是引用類型b a兩個變量指向同一列表a [1, 2, 3] b a b.append(4) print(a) # [1, 2, 3, 4] a 也變了五、練習(xí)題基礎(chǔ)題1.創(chuàng)建 120 的列表用切片取出所有偶數(shù)。2.列表[3, 1, 4, 1, 5, 9, 2, 6]去重并升序排列。3.用列表推導(dǎo)式生成 1100 中能被 3 整除的數(shù)。4.有兩個列表names[張三,李四]和scores[85,92]用 zip 合并輸出。5.實現(xiàn)列表扁平化[[1,2],[3,4],[5]]→[1,2,3,4,5]。進階題6.找出列表第二大元素不允許 sort 整個列表。7.旋轉(zhuǎn)列表將[1,2,3,4,5]左旋轉(zhuǎn) 2 位得[3,4,5,1,2]。參考答案點擊展開參考答案# 1. nums list(range(1, 21)) evens nums[1::2] # 或 [x for x in nums if x % 2 0] # 2. lst [3, 1, 4, 1, 5, 9, 2, 6] result sorted(set(lst)) # 3. div3 [x for x in range(1, 101) if x % 3 0] # 4. for name, score in zip(names, scores): print(f{name}: {score}) # 5. nested [[1, 2], [3, 4], [5]] flat [item for sub in nested for item in (sub if isinstance(sub, list) else [sub])] # 6. def second_max(lst): m1 m2 float(-inf) for x in lst: if x m1: m2, m1 m1, x elif x m2: m2 x return m2 # 7. lst [1, 2, 3, 4, 5] k 2 rotated lst[k:] lst[:k]