核心数组叠加方法
1. append() - 添加单个元素
在列表末尾添加单个元素
# 基本用法
numbers = [1, 2, 3]
numbers.append(4)
print(numbers) # 输出: [1, 2, 3, 4]
# 添加另一个列表(作为单个元素)
matrix = [[1, 2], [3, 4]]
matrix.append([5, 6])
print(matrix) # 输出: [[1, 2], [3, 4], [5, 6]]
特点:
- 时间复杂度: O(1)
- 原地操作,不创建新列表
- 只能添加单个元素
- 添加列表时会将整个列表作为单个元素
2. extend() - 添加多个元素
在列表末尾添加另一个可迭代对象的所有元素
# 基本用法
fruits = ['apple', 'banana']
fruits.extend(['orange', 'grape'])
print(fruits) # 输出: ['apple', 'banana', 'orange', 'grape']
# 添加其他可迭代对象
numbers = [1, 2, 3]
numbers.extend(range(4, 7))
print(numbers) # 输出: [1, 2, 3, 4, 5, 6]
特点:
- 时间复杂度: O(k) (k为添加元素的个数)
- 原地操作,不创建新列表
- 可以添加任何可迭代对象
- 比append + for循环更高效
3. insert() - 在指定位置添加元素
在指定索引位置插入元素
# 在索引0处插入元素(开头)
colors = ['red', 'blue']
colors.insert(0, 'green')
print(colors) # 输出: ['green', 'red', 'blue']
# 在索引1处插入元素
numbers = [10, 30]
numbers.insert(1, 20)
print(numbers) # 输出: [10, 20, 30]
# 插入整个列表(作为单个元素)
data = [1, 2, 3]
data.insert(1, ['a', 'b'])
print(data) # 输出: [1, ['a', 'b'], 2, 3]
特点:
- 时间复杂度: O(n) (因为需要移动元素)
- 原地操作,不创建新列表
- 在开头插入比在末尾插入慢
- 可以插入任何位置
4. + 运算符 - 列表拼接
连接两个列表创建一个新列表
# 基本拼接
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2
print(combined) # 输出: [1, 2, 3, 4, 5, 6]
# 原始列表不变
print(list1) # 输出: [1, 2, 3]
print(list2) # 输出: [4, 5, 6]
# 多个列表拼接
result = [1, 2] + [3, 4] + [5, 6]
print(result) # 输出: [1, 2, 3, 4, 5, 6]
特点:
- 时间复杂度: O(n + m)
- 创建新列表,原始列表不变
- 语法简洁明了
- 内存使用较高(需要创建新列表)
5. 列表解析 - 灵活的元素处理
使用表达式和循环创建新列表
# 合并两个列表
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = [x for pair in zip(list1, list2) for x in pair]
print(combined) # 输出: [1, 4, 2, 5, 3, 6]
# 复杂合并操作
numbers = [1, 2, 3]
squares = [x**2 for x in numbers]
combined = [num for pair in zip(numbers, squares) for num in pair]
print(combined) # 输出: [1, 1, 2, 4, 3, 9]
# 条件筛选
list1 = [1, 2, 3, 4, 5]
list2 = [10, 20, 30]
combined = [x for x in list1 + list2 if x % 2 == 0]
print(combined) # 输出: [2, 4, 10, 20, 30]
特点:
- 非常灵活,可以添加条件逻辑
- 创建新列表
- 语法简洁但可能降低可读性
- 适合需要元素转换或筛选的场景
高级方法:itertools.chain
对于需要高效合并多个大型可迭代对象的情况,可以使用itertools.chain
import itertools
# 合并多个列表
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]
# 创建chain对象(惰性求值)
chained = itertools.chain(list1, list2, list3)
print(chained) # 输出: <itertools.chain object at 0x...>
# 转换为列表
combined = list(chained)
print(combined) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 合并不同类型的可迭代对象
numbers = [1, 2, 3]
chars = ['a', 'b', 'c']
rng = range(4, 7)
combined = list(itertools.chain(numbers, chars, rng))
print(combined) # 输出: [1, 2, 3, 'a', 'b', 'c', 4, 5, 6]
优势:
- 高效处理大型数据集(惰性求值)
- 内存使用低(不创建中间列表)
- 可以合并不同类型的可迭代对象
- 特别适合只需要迭代一次的情况
发表评论