我正在尝试找到一种将值附加到列表中每个元组的方法。假设我有以下两个列表:
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')]
使用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
。
只需使用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')]