列表基础

Python 中的列表(list)本质是一个有序、可变、可重复的序列容器。列表的声明和初始化可以通过以下方式实现:

list1 = [1, 2, 3, 4, 5]           # 直接赋值
list2 = list()                    # 空列表
list3 = []                        # 空列表(简写)
list4 = list(range(5))            # 通过可迭代对象创建
list5 = [0] * 10                  # 重复元素初始化
列表输入与输出

使用内置函数可以方便地进行列表的输入和输出操作:

# 手动输入元素
n = int(input("Enter number of elements: "))
nums = []
for i in range(n):
    val = int(input(f"Element {i+1}: "))
    nums.append(val)

print("Your list:", nums)         # 直接输出整个列表

# 格式化输出
for i, val in enumerate(nums):
    print(f"Index {i}: {val}")
常用列表处理函数/方法

Python 内置了丰富的列表操作方法:

nums = [3, 1, 4, 1, 5]

# 添加元素
nums.append(9)                    # 末尾添加
nums.insert(0, 0)                 # 指定位置插入
nums.extend([2, 6])               # 批量扩展

# 删除元素
nums.remove(1)                    # 删除第一个匹配值
popped = nums.pop()               # 删除并返回末尾元素
del nums[0]                       # 按索引删除

# 查找与统计
print(nums.index(4))              # 查找元素索引
print(nums.count(1))              # 统计出现次数

# 排序与反转
nums.sort()                       # 原地升序排序
nums.sort(reverse=True)           # 原地降序排序
nums.reverse()                    # 原地反转

# 其他常用操作
print(len(nums))                  # 列表长度
print(max(nums), min(nums))       # 最值
print(sum(nums))                  # 求和
列表与索引/切片

列表与索引密切相关,支持正向/反向索引和切片操作:

fruits = ["apple", "banana", "cherry", "date", "elderberry"]

# 索引访问
print(fruits[0])                  # 第一个元素: apple
print(fruits[-1])                 # 最后一个元素: elderberry

# 切片操作 [start:end:step]
print(fruits[1:4])                # ['banana', 'cherry', 'date']
print(fruits[::2])                # ['apple', 'cherry', 'elderberry']
print(fruits[::-1])               # 反转列表

# 遍历列表
for fruit in fruits:
    print(fruit, end=" ")
print()
嵌套列表(二维列表)

处理多维数据时可以使用嵌套列表:

# 二维列表
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# 访问元素
print(matrix[1][2])               # 6

# 遍历二维列表
for row in matrix:
    for val in row:
        print(f"{val:2d}", end=" ")
    print()

# 列表推导式创建二维列表
n, m = 3, 4
grid = [[0 for _ in range(m)] for _ in range(n)]
print(grid)
列表操作示例

列表推导式是一个强大特性,可以简洁地创建和转换列表:

# 基础列表推导式
squares = [x**2 for x in range(10)]
print(squares)                    # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 带条件的列表推导式
evens = [x for x in range(20) if x % 2 == 0]
print(evens)                      # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

# 嵌套列表推导式
pairs = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
print(pairs)

# 字符串处理
words = ["Hello", "World", "Python"]
upper_words = [w.upper() for w in words]
print(upper_words)                # ['HELLO', 'WORLD', 'PYTHON']
安全列表处理

为防止索引越界和意外修改,推荐以下安全做法:

data = [10, 20, 30, 40, 50]

# 安全访问(避免 IndexError)
index = 10
value = data[index] if 0 <= index < len(data) else None
print(value)                      # None

# 使用 try-except
try:
    val = data[10]
except IndexError:
    val = "Index out of range"
print(val)

# 复制列表(避免引用问题)
copy1 = data.copy()               # 浅拷贝
copy2 = data[:]                   # 切片拷贝
copy3 = list(data)                # 构造函数拷贝
import copy
deep_copy = copy.deepcopy(data)   # 深拷贝(嵌套列表时必需)
自定义列表函数

实现自定义的列表处理函数可以加深对列表的理解:

def my_sum(lst):
    """自定义求和函数"""
    total = 0
    for val in lst:
        total += val
    return total

def my_max(lst):
    """自定义最大值函数"""
    if not lst:
        return None
    max_val = lst[0]
    for val in lst[1:]:
        if val > max_val:
            max_val = val
    return max_val

def flatten(nested):
    """扁平化嵌套列表"""
    result = []
    for item in nested:
        if isinstance(item, list):
            result.extend(flatten(item))
        else:
            result.append(item)
    return result

# 测试
nums = [3, 1, 4, 1, 5, 9, 2, 6]
print(f"Sum: {my_sum(nums)}")     # 31
print(f"Max: {my_max(nums)}")     # 9

nested = [1, [2, [3, 4], 5], 6]
print(flatten(nested))            # [1, 2, 3, 4, 5, 6]
性能注意事项

列表操作在 Python 中需要特别注意性能和内存问题:

  • 避免频繁的中间列表创建:优先使用生成器表达式处理大数据
  • 预分配容量:对于已知大小的列表,使用 [None] * n 预分配
  • 选择合适的数据结构:频繁在头部插入/删除时考虑 collections.deque
  • 列表推导式优于循环:在可读性允许的情况下,推导式通常更快

以上代码示例涵盖了 Python3 列表的主要概念和操作,从基础用法到高级技巧,为开发者提供了全面的参考。

更多推荐