代码之家  ›  专栏  ›  技术社区  ›  Stefano Borini

用蟒蛇式的方法炸开一个元组列表

  •  6
  • Stefano Borini  · 技术社区  · 16 年前

    我要做与此相反的事

    Multiple Tuple to Two-Pair Tuple in Python?

    也就是说,我有一个元组列表

    [(1,2), (3,4), (5,6)]
    

    需要制作这个

    [1,2,3,4,5,6]
    

    我会亲自做这个

    >>> tot = []
    >>> for i in [(1,2), (3,4), (5,6)]:
    ...     tot.extend(list(i))
    

    但我想看看更漂亮的东西。

    3 回复  |  直到 16 年前
        1
  •  19
  •   Community Mohan Dere    8 年前

    最有效的方法是:

    tuples = [(1,2), (3,4), (5,6)]
    [item for t in tuples for item in t]
    

    输出

    [1, 2, 3, 4, 5, 6]
    

    这里是 the comparison 在一个重复的问题中,我用各种方法做到了这一点。

    我知道有人会建议这个解决方案

    sum(tuples, ())
    

    但不要使用它,它会为每个步骤创建一个新的中间结果列表!除非你不关心性能,只想要一个紧凑的解决方案。 有关详细信息,请查看 Alex's answer

    总而言之:对于小列表,SUM更快,但是对于大列表,性能会显著降低。

        2
  •  6
  •   Tim Pietzcker    16 年前
    >>> import itertools
    >>> tp = [(1,2),(3,4),(5,6)]
    >>> lst = list(itertools.chain(*tp))
    >>> lst
    [1, 2, 3, 4, 5, 6]
    

    当然,如果您不需要列表,只需要一个迭代器,那么可以删除 list() 转换调用。

        3
  •  2
  •   eduffy    16 年前
    l = [(1,2), (3,4), (5,6)]
    reduce (lambda x,y: x+list(y), l, [])
    
    推荐文章