【问题标题】:merging two lists, removing empty strings合并两个列表,删除空字符串
【发布时间】:2014-02-02 00:04:59
【问题描述】:

我对python的数据结构技巧有点陌生,我一直在努力解决一个简单的问题。

我有 2 个二维列表

L1=[[1, '', 3],[1, '', 3]...]
L2=[['',2,''],['',2,''].....]

我正在寻找一种简单的方法来合并两个列表,以便结果是一个新的二维列表,格式如下:

result=[[1,2,3],[1,2,3]....]

我试过了

newestlist=[sum(x,[]) for x in zip(mylist, mylist2)]

但它会产生结果

badresult=[[1,'',3,'',2,'']....]

有没有办法做到这一点?

【问题讨论】:

    标签: python list


    【解决方案1】:

    如果任何数字为 0,这将不起作用:

    >>> [[x or y or 0 for x, y in zip(a, b)] for a, b in zip(L1, L2)]
    [[1, 2, 3], [1, 2, 3]]
    

    编辑:为了清楚起见,将理解分解为 for 循环:

    output = []
    for a, b in zip(L1, L2):
        innerlist = []
        for x, y in zip(a, b):
            innerlist.append(x or y or 0)  # 1 or '' = 1; '' or 2 = 2; etc
        output.append(innerlist)
    

    【讨论】:

    • 这很好用。我不知道为什么,但我想这对我来说意味着更多的文档......
    • @Mike,为清晰起见,使用 for 循环进行了编辑。理解执行 for 循环中的内容
    • 感谢您的澄清!因此,如果我理解正确,x== 我们的“内容”项(1,2 或 3)和 y==我们的“非内容”项('')?
    • 不一定。 x 循环通过[1, '', 3],y 循环通过['', 2, '']or 选择你想要的
    • x or y or 0 可以轻松解决零情况。
    【解决方案2】:

    你可以试试:

    newestlist = [[a if a != "" else b for a, b in zip(l1, l2)]
                  for l1, l2 in zip(L1, L2)]
    

    这给了我你想要的输出:

    [[1, 2, 3], [1, 2, 3]]
    

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      相关资源
      最近更新 更多