Python列表操作完全指南

1 列表基础

• 列表是Python中最常用的可变序列类型,用方括号`[]`表示

• 列表可以存储任意类型的数据(数字、字符串、对象等)

• 列表是有序的,元素按添加顺序排列,支持索引和切片操作

# 创建列表
empty_list = []
fruits = ['apple', 'banana', 'cherry']
mixed = [1, 'a', True, 3.14]

2 访问列表元素

• 使用索引访问单个元素(索引从0开始)

• 使用负索引从末尾访问(-1表示最后一个元素)

• 切片操作访问子列表

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

# 正向索引
first = fruits[0]  # 'apple'
second = fruits[1]  # 'banana'

# 负向索引
last = fruits[-1]  # 'elderberry'
second_last = fruits[-2]  # 'date'

# 切片操作
subset = fruits[1:3]  # ['banana', 'cherry']
start_to_end = fruits[2:]  # ['cherry', 'date', 'elderberry']
copy = fruits[:]  # 创建完整副本

3 修改列表元素

• 通过索引直接修改单个元素

• 通过切片修改多个元素

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

# 修改单个元素
numbers[0] = 100  # [100, 20, 30, 40, 50]

# 修改多个元素
numbers[1:3] = [200, 300]  # [100, 200, 300, 40, 50]

# 使用不同长度的序列替换
numbers[1:4] = [2000]  # [100, 2000, 50]

4 添加元素

• 使用`append()`在末尾添加单个元素

• 使用`extend()`或`+`操作符合并列表

• 使用`insert()`在指定位置插入元素

numbers = [10, 20, 30]

# 末尾添加单个元素
numbers.append(40)  # [10, 20, 30, 40]

# 合并列表
numbers.extend([50, 60])  # [10, 20, 30, 40, 50, 60]
numbers += [70, 80]  # [10, 20, 30, 40, 50, 60, 70, 80]

# 在指定位置插入
numbers.insert(0, 5)  # [5, 10, 20, 30, 40, 50, 60, 70, 80]
numbers.insert(3, 25)  # 在索引3位置插入25

5 删除元素

• 使用`del`语句通过索引删除

• 使用`remove()`通过值删除第一个匹配项

• 使用`pop()`删除并返回指定位置的元素(默认最后)

• 使用`clear()`清空整个列表

numbers = [10, 20, 30, 40, 50, 60, 70, 80]

# 通过索引删除
del numbers[0]  # 删除第一个元素
del numbers[1:3]  # 删除索引1到2的元素

# 通过值删除
numbers.remove(50)  # 删除第一个值为50的元素

# pop删除并返回
last = numbers.pop()  # 删除并返回最后一个元素
third = numbers.pop(2)  # 删除并返回索引2的元素

# 清空列表
numbers.clear()

6 列表排序

• 使用`sort()`方法原地排序

• 使用`sorted()`函数返回新列表

• 支持反向排序和自定义排序规则

numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# 原地升序排序
numbers.sort()  # [1, 1, 2, 3, 4, 5, 6, 9]

# 原地降序排序
numbers.sort(reverse=True)  # [9, 6, 5, 4, 3, 2, 1, 1]

# 使用sorted函数返回新列表
new_numbers = sorted(numbers)  # 原列表不变

# 自定义排序规则
words = ['apple', 'Banana', 'cherry', 'Date']
words.sort(key=str.lower)  # 不区分大小写排序

# 按长度排序
words.sort(key=len)  # ['Date', 'apple', 'Banana', 'cherry']

7 列表推导式

• 简洁高效地创建列表

• 支持条件过滤

• 支持多重循环

# 基本推导式
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]

# 多重循环
pairs = [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
# 结果:[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

8 常用内置函数

• `len()`:获取列表长度

• `max()`和`min()`:获取最大/最小值

• `sum()`:计算列表元素总和

• `all()`和`any()`:检查所有/任意元素是否为True

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

print(len(numbers))  # 5
print(max(numbers))  # 50
print(min(numbers))  # 10
print(sum(numbers))  # 150

# 逻辑检查
bool_list = [True, False, True]
print(all(bool_list))  # False
print(any(bool_list))  # True

9 列表作为栈和队列

• 栈操作:后进先出(LIFO)

• 入栈:`append()`

• 出栈:`pop()`

• 队列操作:先进先出(FIFO)

• 入队:`append()`

• 出队:`pop(0)`(效率较低,建议使用`collections.deque`)

# 栈操作示例
stack = []
stack.append('a')  # 入栈
stack.append('b')  # 入栈
top = stack.pop()  # 出栈 'b'
print(stack)  # ['a']

# 队列操作示例(低效方式)
queue = []
queue.append('a')  # 入队
queue.append('b')  # 入队
first = queue.pop(0)  # 出队 'a'
print(queue)  # ['b']

10 列表高级操作

• 使用`enumerate()`同时获取索引和值

• 使用`zip()`合并多个列表

• 使用`filter()`和`map()`进行函数式操作

# 使用enumerate
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

# 使用zip合并列表
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
combined = list(zip(list1, list2))  # [(1, 'a'), (2, 'b'), (3, 'c')]

# 使用filter和map
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 过滤偶数
evens = list(filter(lambda x: x % 2 == 0, numbers))
# 计算平方
squares = list(map(lambda x: x**2, numbers))

11 总结

Python列表是灵活且强大的数据结构,提供了丰富的操作方法。本指南涵盖了从基础创建、访问、修改到高级的排序、推导式和函数式编程技巧。掌握这些操作将使你能够高效地处理各种数据任务。记住在实际开发中:

• 对于频繁的两端操作,考虑使用`collections.deque`替代列表

• 大型列表操作时,注意性能影响(如频繁的`insert(0, item)`或`pop(0)`)

• 利用列表推导式和内置函数可以使代码更简洁高效

• 列表的可变性使其成为动态数据集的理想选择,但也需注意意外修改的问题

发表回复

后才能评论