如何在Python中将不同类型的列表合并为一个

时间:2017-02-12 18:06:24

标签: python list merge tuples

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

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)]

3 个答案:

答案 0 :(得分:2)

可以添加元组以形成新元组,因此您应该使用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)]

答案 1 :(得分:1)

您可以使用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无法连接

答案 2 :(得分:0)

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)]