列表详解
列表的创建
列表是Python中最常用的数据结构,用方括号 [] 表示,元素之间用逗号分隔:
# 创建列表
numbers = [1, 2, 3, 4, 5]
fruits = ["苹果", "香蕉", "橘子"]
mixed = [1, "hello", 3.14, True, None] # 可以混合类型
nested = [[1, 2], [3, 4], [5, 6]] # 嵌套列表
# 空列表
empty = []
empty2 = list()
# 使用list()构造函数
chars = list("Hello") # ['H', 'e', 'l', 'l', 'o']
索引与切片
列表支持与字符串相同的索引和切片操作:
fruits = ["苹果", "香蕉", "橘子", "西瓜", "葡萄"]
# 索引
print(fruits[0]) # 苹果
print(fruits[-1]) # 葡萄
# 切片
print(fruits[1:3]) # ['香蕉', '橘子']
print(fruits[:3]) # ['苹果', '香蕉', '橘子']
print(fruits[::2]) # ['苹果', '橘子', '葡萄']
print(fruits[::-1]) # ['葡萄', '西瓜', '橘子', '香蕉', '苹果']
# 切片赋值(列表可变)
fruits[1:3] = ["桃子", "芒果", "樱桃"]
print(fruits) # ['苹果', '桃子', '芒果', '樱桃', '西瓜', '葡萄']
列表方法
添加元素
fruits = ["苹果", "香蕉"]
# append() - 末尾添加单个元素
fruits.append("橘子")
print(fruits) # ['苹果', '香蕉', '橘子']
# insert() - 指定位置插入
fruits.insert(1, "桃子")
print(fruits) # ['苹果', '桃子', '香蕉', '橘子']
# extend() - 末尾添加多个元素
fruits.extend(["西瓜", "葡萄"])
print(fruits) # ['苹果', '桃子', '香蕉', '橘子', '西瓜', '葡萄']
# 使用 + 运算符
new_fruits = fruits + ["芒果"]
删除元素
fruits = ["苹果", "香蕉", "橘子", "香蕉", "西瓜"]
# remove() - 删除第一个匹配项
fruits.remove("香蕉")
print(fruits) # ['苹果', '橘子', '香蕉', '西瓜']
# pop() - 删除并返回指定位置的元素
last = fruits.pop()
print(last) # 西瓜
print(fruits) # ['苹果', '橘子', '香蕉']
first = fruits.pop(0)
print(first) # 苹果
# del - 删除指定位置或切片
del fruits[0]
print(fruits) # ['香蕉']
# clear() - 清空列表
fruits.clear()
print(fruits) # []
查找与统计
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
# index() - 查找元素位置
print(numbers.index(5)) # 4(第一次出现的位置)
print(numbers.index(5, 5)) # 8(从索引5开始查找)
# count() - 统计出现次数
print(numbers.count(1)) # 2
print(numbers.count(7)) # 0
# in - 检查元素是否存在
print(5 in numbers) # True
print(7 not in numbers) # True
排序与反转
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# sort() - 原地排序(修改原列表)
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 6, 9]
numbers.sort(reverse=True)
print(numbers) # [9, 6, 5, 4, 3, 2, 1, 1]
# sorted() - 返回新列表(不修改原列表)
original = [3, 1, 4, 1, 5]
new_sorted = sorted(original)
print(original) # [3, 1, 4, 1, 5]
print(new_sorted) # [1, 1, 3, 4, 5]
# reverse() - 原地反转
numbers = [1, 2, 3]
numbers.reverse()
print(numbers) # [3, 2, 1]
# reversed() - 返回迭代器
numbers = [1, 2, 3]
for num in reversed(numbers):
print(num, end=" ")
复制列表
original = [1, 2, 3, 4, 5]
# 浅拷贝方法
copy1 = original.copy()
copy2 = original[:]
copy3 = list(original)
# 注意:赋值不是拷贝
not_copy = original # 这是引用,修改not_copy会影响original
# 修改拷贝不影响原列表
copy1[0] = 99
print(original) # [1, 2, 3, 4, 5]
print(copy1) # [99, 2, 3, 4, 5]
列表推导式
列表推导式是创建列表的简洁方式:
# 基本语法: [表达式 for 变量 in 可迭代对象]
# 生成平方数
squares = [x ** 2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 带条件过滤
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
# [0, 4, 16, 36, 64]
# 多条件
result = [x for x in range(100) if x % 2 == 0 if x % 3 == 0]
# 能被2和3整除的数
# 嵌套循环
pairs = [(x, y) for x in range(3) for y in range(3)]
# [(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2)]
# 字符串处理
words = ["hello", "world", "python"]
upper_words = [word.upper() for word in words]
# ['HELLO', 'WORLD', 'PYTHON']
常用模式
列表去重
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique = list(set(numbers))
print(unique) # [1, 2, 3, 4]
# 保持顺序的去重
seen = set()
unique_ordered = []
for num in numbers:
if num not in seen:
seen.add(num)
unique_ordered.append(num)
列表扁平化
nested = [[1, 2], [3, 4], [5, 6]]
flat = []
for sublist in nested:
flat.extend(sublist)
print(flat) # [1, 2, 3, 4, 5, 6]
# 使用列表推导式
flat = [item for sublist in nested for item in sublist]
总结
列表是Python中最灵活的数据结构之一,支持增删改查各种操作。掌握了列表的方法和列表推导式后,你就能高效地管理和处理数据。下一节我们将学习元组——不可变版本的列表。