Python 中的列表(List)是最常用、最靈活的有序數據集合,支持動態增刪改查操作。以下是列表的核心知識點:
一、基礎特性
- 有序性:元素按插入順序存儲
- 可變性:支持增刪改操作
- 允許重復:可存儲重復元素
- 異構性:可包含不同類型數據
my_list = [1, "apple", 3.14, True]
二、創建列表
1. 直接定義
fruits = ["apple", "banana", "orange"]
empty_list = [] # 空列表
2. 類型轉換
list("hello") # → ['h', 'e', 'l', 'l', 'o']
list((1,2,3)) # → [1, 2, 3]
3. 快速初始化
zeros = [0] * 5 # → [0, 0, 0, 0, 0]
matrix = [[0]*3 for _ in range(3)] # 二維列表
三、常用操作
1. 索引與切片
nums = [10, 20, 30, 40, 50]
nums[0] # → 10(正向索引,從0開始)
nums[-1] # → 50(反向索引,從-1開始)
nums[1:4] # → [20, 30, 40](切片,左閉右開)
nums[::-1] # → [50, 40, 30, 20, 10](逆序)
2. 增刪改查
# 增
nums.append(60) # 末尾添加 → [10,20,30,40,50,60]
nums.insert(2, 25) # 指定位置插入 → [10,20,25,30,40,50]# 刪
nums.pop() # 刪除末尾元素 → 返回60
nums.remove(30) # 刪除第一個匹配項 → 刪除30
del nums[1:3] # 刪除索引1-2的元素 → 刪除20,25# 改
nums[0] = 100 # 修改索引0的元素 → [100,40,50]# 查
if 50 in nums: # 成員檢查 → Trueprint("存在")
四、常用方法
1. 排序與反轉
nums = [3, 1, 4, 1, 5]
nums.sort() # 原地排序 → [1, 1, 3, 4, 5]
sorted_nums = sorted(nums) # 返回新列表 → [1,1,3,4,5]
nums.reverse() # 原地反轉 → [5,4,3,1,1]
2. 統計與查找
nums.count(1) # 統計出現次數 → 2
nums.index(4) # 查找首次出現位置 → 2
3. 連接與復制
a = [1,2]
b = [3,4]
a + b # → [1,2,3,4](生成新列表)
a * 2 # → [1,2,1,2]
a.extend(b) # 原地擴展 → a變為[1,2,3,4]
五、嵌套列表
1. 創建多維列表
matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]
2. 訪問元素
matrix[0][1] # → 2(第一行第二列)
3. 修改元素
matrix[2][0] = 77 # 修改第三行第一列為77
六、高級技巧
1. 列表推導式
squares = [x**2 for x in range(10) if x%2 == 0]
# → [0, 4, 16, 36, 64]
2. 淺拷貝 vs 深拷貝
import copyoriginal = [[1,2], [3,4]]
shallow = original.copy() # 淺拷貝(共享子列表)
deep = copy.deepcopy(original) # 深拷貝(完全獨立)
3. 列表與生成器
# 列表(直接存儲所有元素)
list_data = [x for x in range(1000000)]# 生成器(按需生成,節省內存)
gen_data = (x for x in range(1000000))
七、常見應用場景
-
數據清洗:
raw_data = [" 42 ", "3.14", "NaN", "7"] cleaned = [float(x.strip()) for x in raw_data if x.strip().replace('.','').isdigit()] # → [42.0, 3.14, 7.0]
-
批量處理:
# 批量重命名文件 files = ["a.txt", "b.txt", "c.txt"] new_files = [f"{i}.txt" for i, name in enumerate(files)]
-
算法實現:
# 快速排序 def quicksort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr)//2]return quicksort([x for x in arr if x < pivot]) + \[x for x in arr if x == pivot] + \quicksort([x for x in arr if x > pivot])
八、性能優化
-
尾部操作優先:
append()
/pop()
時間復雜度 O(1)- 頭部插入/刪除 O(n)(需移動所有元素)
-
避免頻繁拼接:
# 低效方式 res = [] for x in big_list:res += [x] # 每次生成新列表# 高效方式 res = [] for x in big_list:res.append(x) # 原地修改
-
預分配空間(大數據量時):
arr = [0] * 1000000 # 預分配百萬元素列表
九、常見陷阱
-
可變默認參數:
def bad_append(new_item, my_list=[]): # 危險!默認參數共享my_list.append(new_item)return my_list# 正確做法 def good_append(new_item, my_list=None):if my_list is None:my_list = []my_list.append(new_item)return my_list
-
淺拷貝問題:
a = [[1,2], [3,4]] b = a.copy() # 淺拷貝 b[0][0] = 99 # 修改會影響a
通過掌握這些內容,可以高效處理從簡單數據存儲到復雜算法實現的各種場景。實際應用中需根據需求選擇合適的方法,并注意性能優化和內存管理。