【问题标题】:in Python, How to join a list of tuples into one list? [duplicate]在 Python 中,如何将元组列表加入一个列表? [复制]
【发布时间】:2013-02-22 12:45:29
【问题描述】:

继我之前的问题How to group list items into tuple?

如果我有一个元组列表,例如

a = [(1,3),(5,4)]

如何解压缩元组并将其重新格式化为一个列表

b = [1,3,5,4]

我认为这也与iter 函数有关,但我真的不知道该怎么做。请赐教。

【问题讨论】:

标签: python tuples


【解决方案1】:
b = [i for sub in a for i in sub]

这样就可以了。

【讨论】:

  • 哦,是的,这很简单,我在想什么......
  • 不错的一个。我不得不考虑一下 - “sub 到底是从哪里来的?”
  • 为什么/如何工作?
  • 请解释一下它是如何工作的,我也被双循环弄糊涂了
  • @ruief @Asara 双循环的工作方式与您将其编写为嵌套的 for 循环一样:for sub in a 挑选出a 的每个子列表(或在本例中为每个元组) ,然后for i in sub 挑选出每个子列表中的每个元素,将它们放在一起形成结果列表。希望这能让它更清楚一点。
【解决方案2】:
import itertools
b = [i for i in itertools.chain(*[(1,3),(5,4)])]

【讨论】:

    【解决方案3】:

    只需遍历列表 a 并解包元组:

    l = []
    for x,y in a:
       l.append(x)
       l.append(y)
    

    【讨论】:

      【解决方案4】:
      In [11]: list(itertools.chain(*a))
      Out[11]: [1, 3, 5, 4]
      

      如果你只需要遍历1, 3, 5, 4,你可以去掉list()调用。

      【讨论】:

      • itertools.chain.from_iterable 有什么意义,如果你能做到这一点?
      • @Volatility:懒惰评估?
      【解决方案5】:

      另一种方式:

      a = [(1,3),(5,4)]
      b = []
      
      for i in a:
          for j in i:
              b.append(j)
      
      print b
      

      这将只处理列表中的元组 (a) 寿。如果您也想解析松散变量,则需要添加 if-else 语句,例如;

      a = [(1,3),(5,4), 23, [21, 22], {'somevalue'}]
      b = []
      
      for i in a:
          if type(i) == (tuple) or type(i) == (list) or type(i) == (set):
              for j in i:
                  b.append(j)
          else:
              b.append(i)
      
      print b
      

      【讨论】:

      • 使用isinstance(i, collections.Iterable)代替类型检查(假设collections已经被导入)
      猜你喜欢
      • 2015-10-30
      • 1970-01-01
      • 2014-02-07
      • 2011-10-15
      • 2017-05-09
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多