【问题标题】:Python Merge lists together in one list without blanksPython将列表合并到一个列表中,没有空格
【发布时间】:2020-09-27 14:07:28
【问题描述】:

我有三个列表,一个列表的空白被另一个列表填充。所以我想用其他两个列表来完成第一个列表。 示例:

L1=[1,2,None,None,5,None,7,None,None,10]
L2=[None,None,3,4,None,None,None,None,9,None]
L3=[None,None,None,None,None,6,None,8,None,None]
result_List= [1,2,3,4,5,6,7,8,9,10]

列表来自 XML 导出和 .append 函数。所以我的目标是将所有元素插入第一列。使用 .append 它会创建许多列,而 .extend 只是将它们与空白元素一起写在彼此后面。

注意:这些值是 25 位数字的字符串,并且是混合的字母和数字,所以我无法比较列表中的值。它们只能通过它们所处的位置/索引进行比较。

【问题讨论】:

  • 不,你没有这样的东西。 [1,2,,,5,,7,,,10] 只是一个语法错误。你真正拥有什么?
  • 这是你的L1=[1,2,None,None,5,None,7,None,None,10]吗?你提到的空格在Python中不存在。
  • 你说得对,我的数字之间总是有一个“无”。在 csv 导出中,“无”被删除,所以我没有写下来......
  • 你知道如何编写一个for 循环,其索引变量从0 到某个数字吗?

标签: python list csv merge


【解决方案1】:
>>> L1=[1,2,None,None,5,None,7,None,None,10]
>>> L2=[None,None,3,4,None,None,None,None,9,None]
>>> L3=[None,None,None,None,None,6,None,8,None,None]
>>> [a or b or c for a, b, c in zip(L1, L2, L3)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

【讨论】:

  • 完美,效果很好!我有另一个程序,其中有 14 个这样的列表,并且它可以正常工作!谢谢你:)
  • 如果列表的元素之一是 0,则循环将返回 None 而不是 0,因为 bool(0) 是 False
【解决方案2】:

您可以使用filter 来处理任意数量的输入列表:

L1=[1,2,None,None,5,None,7,None,None,10]
L2=[None,None,3,4,None,None,None,None,9,None]
L3=[None,None,None,None,None,6,None,8,None,None]
new_l = [next(filter(None, i)) for i in zip(L1, L2, L3)]

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

【讨论】:

  • 如果列表的元素之一为 0,此方法将引发 StopIteration。我使用 lambda 函数进行过滤,效果很好:[next(filter(lambda x: x is not None, i)) for i in zip(L1, L2, L3)]
猜你喜欢
  • 2019-04-30
  • 2014-05-16
  • 2021-10-12
  • 1970-01-01
  • 2017-10-26
  • 2021-01-10
  • 2013-12-14
  • 2022-09-28
  • 1970-01-01
相关资源
最近更新 更多