一篇文章带你解决列表合并问题
八种连接列表的方式: 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]