八种连接列表的方式:
1 最直观的列表相加
l1 = [1, 2, 3]
l2 = [6, 5, 4]
l3 = [7, 8, 9]
print(l1 + l2 + l3) #[1, 2, 3, 6, 5, 4, 7, 8, 9]
2 借助 itertools
from itertools import chain
l1 = [1, 2, 3]
l2 = [6, 5, 4]
l3 = [7, 8, 9]
print(list(chain(l1 , l2 , l3))) #[1, 2, 3, 6, 5, 4, 7, 8, 9]
3 使用解包形式
l1 = [1, 2, 3]
l2 = [6, 5, 4]
l3 = [7, 8, 9]
print([*l1, *l2, *l3]) # [1, 2, 3, 6, 5, 4, 7, 8, 9]
4 使用extend 在字典中,使用update实现原地更新,而在列表中
使用extend 可以实现列表的自我扩展。
l1 = [1, 2, 3]
l2 = [6, 5, 4]
l3 = [7, 8, 9]
l1.extend(l2)
l1.extend(l3)
print(l1) # [1, 2, 3, 6, 5, 4, 7, 8, 9]
5 使用列表推导式
l1 = [1, 2, 3]
l2 = [6, 5, 4]
l3 = [7, 8, 9]
m=[l for x in (l1,l2,l3) for l in x]
print(m) # [1, 2, 3, 6, 5, 4, 7, 8, 9]
6 使用 heapq
这种方法实现的合并后列表是排序后的结果。
heapq是python 的一个标准模块,它提供了堆排序算法的实现
from heapq import merge
l1 = [1, 2, 3]
l2 = [6, 5, 4]
l3 = [7, 8, 9]
print(list(merge(l1,l2,l3))) # [1, 2, 3, 6, 5, 4, 7, 8, 9]
等价于
sorted(itertools.chain(l1,l2,l3))
7 借助魔法方法
有一个魔法方法叫 __add__,当我们使用第一种方法的时候,内部使用的就是__add__
l1 = [1, 2, 3]
l2 = [6, 5, 4]
l3 = [7, 8, 9]
n1=l1.__add__(l2)
n2=n1.__add__(l3)
print(n2) # [1, 2, 3, 6, 5, 4, 7, 8, 9]
借助这个方法,我们可以使用reduce 这个方法对多个列表进行合并
8 使用 yield from
l1 = [1, 2, 3]
l2 = [6, 5, 4]
l3 = [7, 8, 9]
def merge(*lists):
for l in lists:
yield from l
print(list(merge(l1,l2,l3))) # [1, 2, 3, 6, 5, 4, 7, 8, 9]