← 返回首页
📋

列表详解

📂 python ⏱ 3 min 526 words

列表的创建

列表是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中最灵活的数据结构之一,支持增删改查各种操作。掌握了列表的方法和列表推导式后,你就能高效地管理和处理数据。下一节我们将学习元组——不可变版本的列表。