如何按顺序将值附加到列表中的每个元组?
How to append value in order to every tuple within a list?
我正在尝试找到一种方法来将值附加到列表中的每个元组。假设我有以下两个列表:
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
中的一个元素的所有组合。你不需要所有的对;您只需要 "parallel" 对,其中一个列表中的每个元素都与另一个列表中同一索引处的元素配对。在那种情况下,使用 zip
.
只需使用 zip 和元组连接
>>> 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')]
我正在尝试找到一种方法来将值附加到列表中的每个元组。假设我有以下两个列表:
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
中的一个元素的所有组合。你不需要所有的对;您只需要 "parallel" 对,其中一个列表中的每个元素都与另一个列表中同一索引处的元素配对。在那种情况下,使用 zip
.
只需使用 zip 和元组连接
>>> 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')]