一篇文章带你解决列表合并问题

八种连接列表的方式:
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]

 

posted @ 2021-01-26 14:27  青春叛逆者  阅读(301)  评论(0编辑  收藏  举报