我对某个特定问题有一个理解问题。我有一个预先存在的嵌套列表,我想匹配并将不同列表中的一个值附加到每个嵌套列表的末尾。我尝试过的一个简单例子,但是我被卡住了:
initial_values = [["First", 1], ["Second", 2], ["Third", 3], ["Fourth", 4]]
other_values = [1,2,3,4]
for sublist in initial_values:
for i in other_values:
sublist.append(i)
print initial_values
这会返回[['First', 1, 1, 2, 3, 4], ['Second', 2, 1, 2, 3, 4], ['Third', 3, 1, 2, 3, 4], ['Fourth', 4, 1, 2, 3, 4]]
我希望理想情况下返回[['First', 1, 1], ['Second', 2, 2], ['Third', 3, 3], ['Fourth', 4, 4]]
答案 0 :(得分:2)
您可以使用zip
匹配来自不同列表的相同索引的元素。从那以后,你就是一个简单的列表连接:
[a + [b] for a,b in zip(initial_values, other_values)]
答案 1 :(得分:1)
您似乎希望通过单次迭代浏览两个列表。你可以用zip实现这个目的:
for sublist, i in zip(initial_values, other_values):
sublist.append(i)
答案 2 :(得分:1)
你的双for循环依次获取每个子列表(外部for循环)并将other_values
的每个元素附加到它(内部for循环)。您想要的是将other_values
的每个元素添加到相应的子列表(即相同位置/索引处的子列表)。因此,您只需要一个for循环:
initial_values = [["First", 1], ["Second", 2], ["Third", 3], ["Fourth", 4]]
other_values = [1,2,3,4]
for i in range(len(initial_values)): # get all the valid indices of `initial_values`
initial_values[i].append(other_values[i])
以下是一些更简单的方法:
for i,subl in enumerate(initial_values):
subl.append(other_values[i]))
或者
for subl, val in zip(initial_values, other_values):
subl.append(val)
答案 3 :(得分:1)
如果您想使用for循环,可以尝试
initial_values = [["First", 1], ["Second", 2], ["Third", 3], ["Fourth", 4]]
other_values = [1,2,3,4]
for i in range(0,len(other_values)):
initial_values[i].append(other_values[i])
print initial_values
输出:
[['First', 1, 1], ['Second', 2, 2], ['Third', 3, 3], ['Fourth', 4, 4]]
答案 4 :(得分:0)
内置函数zip会将第一个列表中的第一个项目与第二个列表中的第一个项目等匹配。
initial_values = [["First", 1], ["Second", 2], ["Third", 3], ["Fourth", 4]]
other_values = [1,2,3,4]
for initials, other in zip(initial_values, other_values):
initials.append(other)
答案 5 :(得分:0)
使用map()
作为其中一种替代方法:
>>> map(lambda x: x[0] + [x[1]], zip(initial_values, other_values))
[['First', 1, 1], ['Second', 2, 2], ['Third', 3, 3], ['Fourth', 4, 4]]