【问题标题】:Combine two Python lists with partly empty sublists将两个 Python 列表与部分为空的子列表合并
【发布时间】:2015-12-10 03:22:45
【问题描述】:

我有一个嵌套列表(列表列表),其中每个子列表可能包含一个或多个元素(整数),但有些甚至是空的:

mynestedlist = [[], [], [], [4,10], [4], [10]]

此外,我还有另一个相同长度的列表(所有整数):

otherlist = [2,4,14,32,21,12]

现在我想为我的嵌套列表元素不为空的元素获取元组的组合列表。实际上每个元组都应该包含两个列表中的元素。

例如,mynestedlist 中的第一个非空列表是第四个,即[4,10]。 otherlist 中的对应元素是 32。此信息应强制转换为两个元组 (32,4)(32,10)。因此,如果mynestedlist 的子列表中有多个条目,则应该创建多个元组。 最后输出应该是[(32,4),(32,10),(21,4),(12,10)]。如何以有效的方式做到这一点?

所以到目前为止我尝试的是

*) 使用子列表的总和检查子列表是否为空

[sum(x)>0 for x in mynestedlist]

*) 将两个列表合并成一个字典

combined_list = dict(zip(otherlist,mynestedlist))

我完全不确定这是否可行?

【问题讨论】:

  • 您打算自己做点什么吗? stackoverflow.com/questions/34182181/…
  • stackoverflow 不是代码编写服务。请举例说明您尝试过的方法和无效的方法,有人会尽力帮助您。

标签: python list list-comprehension


【解决方案1】:

这对于列表理解来说实际上非常简单,

>>> [(b, e) for a, b in zip(mynestedlist, otherlist) for e in a]
[(32, 4), (32, 10), (21, 4), (12, 10)]

如果在 Python 2.x 上并且列表很长,您可以使用 itertools.izip

【讨论】:

    【解决方案2】:

    您可以通过两个简单的循环来实现这一点。我很确定这会尽可能高效。

    result = [] 
    A = [2,4,14,32,21,12]
    B = [[], [], [], [4,10], [4], [10]]
    for i in range(len(A)):
        for x in B[i]:
            result.append((A[i],x))
    print result
    

    【讨论】:

      【解决方案3】:
      [(otherlist[i], vv) for i, v in enumerate(mynestedlist) for vv in v]
      

      【讨论】:

        【解决方案4】:
        out = []
        for a, b in zip(mynestedlist, otherlist):
             for ele in a:
                out.append((b, ele))
        print(out)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-27
          • 1970-01-01
          • 2014-05-16
          • 1970-01-01
          相关资源
          最近更新 更多