【问题标题】:How to split a list of 2-tuples into two lists? [duplicate]如何将 2 元组列表拆分为两个列表? [复制]
【发布时间】:2014-03-19 00:07:33
【问题描述】:

我有一个包含许多 2 元组的列表。 我想将列表分成两个列表,一个列表由列表中所有元组的第一个元素组成,另一个列表由所有元组的第二个元素组成。我想知道如何有效地做到这一点?谢谢!

比如我有一个列表y

>>> y = [('ab',1), ('cd', 2), ('ef', 3) ]
>>> type(y)
<type 'list'>

我希望得到两个列表['ab', 'cd', 'ef'][1, 2, 3]

【问题讨论】:

    标签: python list


    【解决方案1】:
    a,b = zip(*y)
    

    这就是你所需要的……

    或者如果您需要它们作为列表而不是元组

    a,b = map(list,zip(*y))
    

    【讨论】:

    • [python 新手] 哇!这比预期的要容易:)
    【解决方案2】:

    zip* 参数解包会给你元组:

    >>> a, b = zip(*y)
    >>> a
    ('ab', 'cd', 'ef')
    >>> b
    (1, 2, 3)
    

    如果您需要列表,您可以在上面使用map

    >>> a, b = map(list, zip(*y))
    >>> a
    ['ab', 'cd', 'ef']
    >>> b
    [1, 2, 3]
    

    【讨论】:

      【解决方案3】:

      使用ziplist comprehension

      >>> y = [('ab', 1), ('cd', 2), ('ef', 3)]
      >>> a,b = [list(c) for c in zip(*y)]
      >>> a
      ['ab', 'cd', 'ef']
      >>> b
      [1, 2, 3]
      >>>
      

      【讨论】:

      • 我认为将其解包到 a,b 会自动将每个列表投射到列表中......例如:a,b=zip(*[(1,2),(3,4)]);print(a);print(b);
      • @JoranBeasley - 不,它们将是元组。
      • 啊,明白了......错过了那个警告
      【解决方案4】:

      试试这个:

      def get_list(tuples):
          list1 = []
          list2 = []
          for i in tuples:
              list1.append(i[0])
              list2.append(i[1])
          return list1, list2
      y = [('ab',1), ('cd', 2), ('ef', 3) ]
      letters, numbers = get_list(y)
      

      【讨论】:

      • 对坚韧的赞誉。内置的zip 可能会更快
      【解决方案5】:

      一种方法是首先将列表转换为临时字典,然后将临时字典的键和值分配到两个列表中

      y = [('ab', 1), ('cd', 2), ('ef', 3)]
      temp_d = dict(y)
      list1 = temp_d.keys()
      list2 = temp_d.values()
      
      print list1
      print list2
      

      【讨论】:

      • 请注意,这只适用于 Python 2.x。在 Python 3.x 中,dict.keysdict.values 返回 view objects
      • 不知道。您将如何使用这种技术修改代码?
      • 您需要将视图对象显式转换为列表。换句话说,您将执行此list1 = list(temp_d),然后执行此list2 = list(temp_d.values())。还要注意,我在第一个示例中删除了对 dict.keys 的调用。不再需要它,因为遍历字典会产生它的键。最后,只有在使用 Python 3.x 时才需要这样做。在 Python 2.x 中,您当前的代码可以正常工作,因为 dict.keysdict.values 返回列表。
      【解决方案6】:
      l1 = []
      l2 = []
      for i in y:
          l1.append(i[0])
          l2.append(i[1])
      
      l1
          ['ab', 'cd', 'ef']
      l2
          [1, 2, 3]
      

      将每个值附加到另一个

      【讨论】:

        猜你喜欢
        • 2019-10-20
        • 2011-11-16
        • 1970-01-01
        • 2012-10-20
        • 2019-04-08
        • 1970-01-01
        • 1970-01-01
        • 2018-11-05
        • 1970-01-01
        相关资源
        最近更新 更多