【问题标题】:create a list from a list of list of tuples从元组列表创建一个列表
【发布时间】:2019-03-15 19:47:03
【问题描述】:

我知道这可能很简单,但我很难做到, 我正在尝试从现有的充满元组的列表列表中创建一个新的列表列表,例如:

listA = [ [(1,2,A), (1,3,B)], [(1,1,B),(1,2,D)], [(1,1,C),(1,3,F], [(1,3,D),(1,5,F)] ]

我想创建一个新列表,由原始列表中的 [2] 元素(字母)列表组成。

所以我的新列表看起来像:

newList = [ [A,B] , [B,D], [C,F], [D,F] ]

我希望这很清楚。

【问题讨论】:

  • 请说明您尝试过的内容以及尝试失败的原因/方式。
  • 请发布通过复制和粘贴工作且不会导致NameError 的代码。

标签: python python-3.x list arraylist append


【解决方案1】:

我已将变量 ABCD 转换为字符串,以提供示例输出。您可以使用单个列表推导,如下所示。

说明:您使用i 遍历各个子列表。每个子列表都有两个元组,您需要其中的最后一个元素。 i[0][-1] 为您提供 first 元组的最后一个元素,i[0][-1] 为您提供 second 元组的最后一个元素,

listA = [ [(1,2,'A'), (1,3,'B')], [(1,1,'B'),(1,2,'D')], [(1,1,'C'),(1,3,'F')], [(1,3,'D'),(1,5,'F')] ]
listB = [[i[0][-1], i[1][-1]] for i in listA]

输出

[['A', 'B'], ['B', 'D'], ['C', 'F'], ['D', 'F']]

【讨论】:

  • 我应该说得更清楚,但谢谢我现在明白了,你给我看的代码有效,但它只占 2 个元组,它们每次都不同,我应该说明这一点
  • 我做了“对于 listA 中的括号:newlist.append([bracket[i][-1] for i in range(len(bracket))])”,这给了我我想要的。但是你指出了我正确的方向,所以谢谢!
  • 很高兴为您提供帮助:)
【解决方案2】:

您可以使用以下嵌套推导:

[[y[2] for y in x] for x in listA]
# [['A', 'B'], ['B', 'D'], ['C', 'F'], ['D', 'F']]

内部推导增加了处理任意长度内部列表的灵活性。

【讨论】:

    【解决方案3】:

    如果numpy 被允许,你可以这样做:

    import numpy as np
    
    listA = [[(1, 2, 'A'), (1, 3, 'B')], [(1, 1, 'B'), (1, 2, 'D')], [(1, 1, 'C'), (1, 3, 'F')], [(1, 3, 'D'), (1, 5, 'F')]]
    print(np.array(listA)[:, :, 2].tolist())
    

    输出

    [['A', 'B'], ['B', 'D'], ['C', 'F'], ['D', 'F']]
    

    您也可以这样做:

    print(np.array(listA)[..., 2].tolist())
    

    【讨论】:

      【解决方案4】:

      您可以使用带有list 的压缩表达式或使用列表推导

      print(list([j[-1] for j in i] for i in lista))
      print([[j[-1] for j in i] for i in lista])
      

      扩展解释:

      new = []
      for i in lista:
          x = []
          for j in i:
              x.append(j[-1])
          new.append(x)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-08
        • 2020-10-15
        • 1970-01-01
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多