【问题标题】:How to merge different type of list as one in Python如何在Python中将不同类型的列表合并为一个
【发布时间】:2017-06-30 16:22:02
【问题描述】:

我有一个包含多个值的列表,如下所示:

list_A = [('Text1',2,3),('Text2',2,45),('Text3',2,23),('Text4',2,0)]

假设它包含 4 个项目,每个项目有 3 个变量。我还有另一个列表,其中包含相同数量的项目,但每个项目都有一个变量,如下所示:

list_B = [7,3,3,9]

我一直在尝试合并它们,到目前为止我唯一能得到的是:

zip(list_A, list_B)
>>[(('Text1',2,3),7), (('Text2',2,45),3), (('Text3',2,0),3), (('Text4',2,3),9)]

tuple(zip(list_A, list_B)
>>((('Text1',2,3),7), (('Text2',2,45),3), (('Text3',2,0),3), (('Text4',2,3),9))

最终结果应该是这样的格式:

new_list = [('Text1',2,3,7),('Text2',2,45,7),('Text3',2,23,7),('Text4',2,0,9)]

【问题讨论】:

  • [(*x, y) for x, y in zip(list_A, list_B)]
  • @vaultah 这是 python 3 吗?你的解决方案是 python 2.7 中的invalid syntax
  • @ppasler 我知道,它适用于 Python 3.5 及更高版本。

标签: python list merge tuples


【解决方案1】:

可以添加元组来形成一个新的元组,所以你应该用list_B中的元素形成一个元组:

>>> list_A = [('Text1',2,3),('Text2',2,45),('Text3',2,23),('Text4',2,0)]
>>> list_B = [7,3,3,9]
>>> [t+(e,) for t,e in zip(list_A, list_B)]
[('Text1', 2, 3, 7), ('Text2', 2, 45, 3), ('Text3', 2, 23, 3), ('Text4', 2, 0, 9)]

或者,仅在 Python 3.5+ 中,您可以这样做:

>>> [(*t, e) for t, e in zip(list_A, list_B)]
[('Text1', 2, 3, 7), ('Text2', 2, 45, 3), ('Text3', 2, 23, 3), ('Text4', 2, 0, 9)]

【讨论】:

  • 感谢您的快速回复!赞赏!! :)
【解决方案2】:

您可以使用zip 和列表理解:

list_A = [('Text1',2,3),('Text2',2,45),('Text3',2,23),('Text4',2,0)]
list_B = [7,3,3,9]

print [x + (y,) for x, y in zip(list_A, list_B)]

注意: x + y 失败,因为 tupleint 不能连接

【讨论】:

  • 非常感谢,你拯救了我的一天 :)
【解决方案3】:

Python 元组有一个特点:它们是不可变的,但它们的值可能会改变。当元组包含对任何可变对象(例如列表)的引用时,可能会发生这种情况。

元组是不可变的,我们不能再修改它:所以我们重新创建它如下:

list_A = [('Text1',2,3),('Text2',2,45),('Text3',2,23),('Text4',2,0)]
list_B = [7,3,3,9]
new_list = [(i[0]+(i[1],)) for i in zip(list_A, list_B)]
or
new_list = [tuple(list(i[0])+[i[1]]) for i in zip(list_A, list_B)]

new_list
[('Text1', 2, 3, 7), ('Text2', 2, 45, 3), ('Text3', 2, 23, 3), ('Text4', 2, 0, 9)]

【讨论】:

  • tuple([j for j in i[0]]+[i[1]]) 简直太糟糕了。为什么[j for j in i[0]] 而不仅仅是list(i[0])?为什么将元组转换为列表只是为了连接它们?它也比i[0] + (i[1],) 慢了大约 6-7 倍,并且可读性差。
猜你喜欢
  • 2022-07-01
  • 2015-04-10
  • 2019-10-07
  • 2016-05-24
  • 2020-05-20
  • 2021-09-22
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多