如何将值附加到列表中的每个元组?

问题描述 投票:1回答:2

我正在尝试找到一种将值附加到列表中每个元组的方法。假设我有以下两个列表:

List_1:
[('xxx', 1), ('yyy', 2), ('zzz', 3), ('aaa', 1), ('fff', 4), ('bbb', 0)]

List_2:
['1', '3', '4', '20', '11', '15']

Desire outcome:
[('xxx', 1, '1'), ('yyy', 2, '3'), ('zzz', 3, '4'), ('aaa', 1, '20'), ('fff', 4, '11'), ('bbb', 0, '15')]

这是我的代码,

for y in List_1:
        for x in List_2:
            desire_list = [list(y) + [x] for y in List_1]

输出将把List_2中的每个值添加到List_1中的每个元组中

[[('xxx', 1, '1'), ('yyy', 2, '1'), ('zzz', 3, '1'), ('aaa', 1, '1'), ('fff', 4, '1'), ('bbb', 0, '1')]]
[[('xxx', 1, '3'), ('yyy', 2, '3'), ('zzz', 3, '3'), ('aaa', 1, '3'), ('fff', 4, '3'), ('bbb', 0, '3')]]

很明显我没有正确执行此操作...我想知道这样做的正确方法是什么,如果我有多个列表想要像我想做的那样将值附加到List_1上,该怎么办?来自List_2?例如:

List_2:['1', '3', '4', '20', '11', '15']
List_3 ['10', '20', '10', '210', '50', '150']

List_1 [('xxx', 1, '1', '10'), ('yyy', 2, '3', '20'), ('zzz', 3, '4', '10'), ('aaa', 1, '20', '210'), ('fff', 4, '11', '50'), ('bbb', 0, '15', '150')]
python list-comprehension dictionary-comprehension
2个回答
4
投票

使用zip和元组解包很简单:

>>> [ (x, y, z) for ((x, y), z) in zip(List_1, List_2) ]
[('xxx', 1, '1'), ('yyy', 2, '3'), ('zzz', 3, '4'), ('aaa', 1, '20'),
 ('fff', 4, '11'), ('bbb', 0, '15')]

您尝试的解决方案的问题在于,您使用了嵌套循环,该循环循环访问List_1中一个元素和List_2中一个元素的所有组合。你不想要所有的对。您只需要“平行”对,其中一个列表中的每个元素与另一列表中相同索引处的元素配对。在这种情况下,请使用zip


3
投票

只需使用zip和tuple串联

>>> lst1 = [('xxx', 1), ('yyy', 2), ('zzz', 3), ('aaa', 1), ('fff', 4), ('bbb', 0)]
>>> lst2 = ['1', '3', '4', '20', '11', '15']
>>> [a + (b,) for a, b in zip(lst1, lst2)]
[('xxx', 1, '1'),
 ('yyy', 2, '3'),
 ('zzz', 3, '4'),
 ('aaa', 1, '20'),
 ('fff', 4, '11'),
 ('bbb', 0, '15')]
© www.soinside.com 2019 - 2024. All rights reserved.