关于Python列表的详细教程,涵盖增删改查、切片、列表推导式及核心方法
一、 列表基础
1.1 创建列表
列表是Python中最常用的数据结构之一,支持动态存储多种类型的元素。
# 空列表
empty_list = []# 初始化列表
numbers = [1, 2, 3, 4]
fruits = ["apple", "banana", "orange"]# 混合类型列表
mixed = [1, "hello", 3.14, True]# 使用构造函数
from_range = list(range(5)) # [0, 1, 2, 3, 4]
from_string = list("Python") # ['P', 'y', 't', 'h', 'o', 'n']
1.2 列表特性
- 有序性:元素按插入顺序存储。
- 可变性:支持原地修改。
- 灵活性:可嵌套其他数据结构(如列表、字典)。
二、 增删改查操作
2.1 增加元素
方法 | 功能说明 | 示例 |
---|---|---|
append(item) | 末尾添加元素 | fruits.append(“grape”) |
insert(index, item) | 指定位置插入元素 | fruits.insert(1, “mango”) |
extend(iterable) | 合并另一个可迭代对象 | fruits.extend([“kiwi”, “peach”]) |
示例:
fruits = ["apple", "banana"]
fruits.append("orange") # ["apple", "banana", "orange"]
fruits.insert(1, "mango") # ["apple", "mango", "banana", "orange"]
fruits.extend(["kiwi"]) # ["apple", "mango", "banana", "orange", "kiwi"]
2.2 删除元素
方法 | 功能说明 | 示例 |
---|---|---|
remove(value) | 删除首个匹配元素 | fruits.remove(“banana”) |
pop([index]) | 删除并返回指定位置元素 | popped = fruits.pop(2) |
del 语句 | 按索引或切片删除 | del fruits[0:2] |
clear() | 清空列表 | fruits.clear() |
示例:
fruits = ["apple", "mango", "banana", "orange"]
fruits.remove("mango") # ["apple", "banana", "orange"]
popped = fruits.pop(1) # popped = "banana",剩余列表:["apple", "orange"]
del fruits[0] # ["orange"]
fruits.clear() # []
2.3 修改元素
通过索引直接赋值:
fruits = ["apple", "banana"]
fruits[1] = "mango" # ["apple", "mango"]# 切片批量修改
fruits[0:2] = ["grape", "peach"] # ["grape", "peach"]
2.4 查询元素
方法/操作 | 功能说明 | 示例 |
---|---|---|
索引访问 | 获取指定位置元素 | fruits[0] → “apple” |
index(value) | 返回元素首次出现的索引 | fruits.index(“mango”) → 1 |
count(value) | 统计元素出现次数 | fruits.count(“apple”) → 1 |
in 关键字 | 检查元素是否存在 | “banana” in fruits → True |
三、切片操作
3.1 基础语法
切片语法:list[start:stop:step],取头不取尾
- start:起始索引(包含)。
- stop:结束索引(不包含)。
- step:步长(默认为1)。
示例:
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]print(nums[2:5]) # [2, 3, 4]
print(nums[::2]) # [0, 2, 4, 6, 8](步长2)
print(nums[::-1]) # [9, 8, 7, ..., 0](反转列表)
3.2 高级用法
- 复制列表:copy = nums[:]
- 删除元素:del nums[2:5]
- 替换元素:nums[1:3] = [10, 20] # 截取的元素和替换的元素个数相等
四、列表推导式
4.1 基本语法
[expression for item in iterable]
示例:
# 生成平方数列表
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]# 转换字符串为小写
words = ["Hello", "World"]
lower_words = [word.lower() for word in words] # ["hello", "world"]
4.2 条件过滤与嵌套
# 过滤偶数
evens = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]# 嵌套循环
matrix = [[1, 2], [3, 4]]
flat = [num for row in matrix for num in row] # [1, 2, 3, 4]
列表合并
5.1 基础合并方法
- **+ 运算符**:
list1 = [1, 2]
list2 = [3, 4]
combined = list1 + list2 # [1, 2, 3, 4]
- extend() 方法:
list1.extend(list2) # 原地合并,list1变为[1, 2, 3, 4]
5.2 复杂合并场景
+ 交替合并(使用zip):
names = ["Alice", "Bob"]
scores = [90, 85]
merged = [x for pair in zip(names, scores) for x in pair] # ["Alice", 90, "Bob", 85]
+ 处理不等长列表(使用zip_longest):
from itertools import zip_longest
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30]
merged = list(zip_longest(names, ages, fillvalue="N/A")) # [("Alice",25), ("Bob",30), ("Charlie","N/A")]
六、列表对象支持的方法
方法 | 功能说明 | 时间复杂度 |
---|---|---|
sort() | 原地排序(支持自定义规则) | O(n logn) |
reverse() | 反转列表顺序 | O(n) |
copy() | 浅拷贝列表 | O(n) |
count(value) | 统计元素出现次数 | O(n) |
index(value) | 返回元素首次出现的索引 | O(n) |
示例:
nums = [3, 1, 4, 1, 5]
nums.sort() # [1, 1, 3, 4, 5]
nums.reverse() # [5, 4, 3, 1, 1]
print(nums.count(1)) # 2
七、实际应用案例
案例1:筛选高于平均分的成绩
scores = [85, 92, 78, 90, 88]
avg = sum(scores) / len(scores)
high_scores = [s for s in scores if s > avg] # [92, 90, 88]
案例2:实时日志处理
from collections import deque
log_buffer = deque(maxlen=100) # 仅保留最新100条日志
while True:new_log = receive_log()log_buffer.append(new_log)
八、性能优化与高级技巧(了解即可)
8.1 头部插入优化
列表的insert(0, item)操作时间复杂度为 O(n),频繁头部插入时建议使用collections.deque:
from collections import deque
dq = deque([1, 2, 3])
dq.appendleft(0) # 头部插入 → deque([0, 1, 2, 3])
8.2 内存优化
生成器表达式处理大数据:
big_data = (x for x in range(10**6)) # 惰性加载,节省内存
Python列表是功能强大且灵活的数据结构,掌握其核心操作与方法能显著提升代码效率。建议结合具体场景选择合适的方法,如高频头部操作使用deque,大数据处理使用生成器。通过实践加深理解