在 for 循环中附加一个列表?
Appending a list within a for loop?
有 2 个给定列表,假设:
list1 = ['node1','node2','node3','node4']
list2 = ['goal1','goal2','goal3']
我需要一个列表 returns:
result = [['node1','node2','node3','node4','goal1'],
['node1','node2','node3','node4','goal2'],
['node1','node2','node3','node4','goal3']]
这是我的:
result = []
for i in range (len(list2)):
list1.append(list2[i])
result.append(list1)
list1.pop()
问题是,结果没有附加所需的值。它打印,
[['node1', 'node2', 'node3', 'node4'],
['node1', 'node2', 'node3', 'node4'],
['node1', 'node2', 'node3', 'node4']]
在 for
循环完成后。
我做错了什么?
您可以使用 extend
解决此问题:
>>> for i in range(len(list2)):
tmp = []
tmp.extend(list1)
tmp.append(list2[i])
all_paths.append(tmp)
>>> all_paths
[['node1', 'node2', 'node3', 'node4', 'goal1'], ['node1', 'node2', 'node3', 'node4', 'goal2'], ['node1', 'node2', 'node3', 'node4', 'goal3']]
您可以使用列表组合将 list1
每个目标添加到列表 1 的末尾:
list1 = ['node1', 'node2', 'node3', 'node4']
list2 = ['goal1', 'goal2', 'goal3']
print([list1 + [gl] for gl in list2])
输出:
[['node1', 'node2', 'node3', 'node4', 'goal1'],
['node1', 'node2', 'node3', 'node4', 'goal2'],
['node1', 'node2', 'node3', 'node4', 'goal3']]
您的循环所做的是重复将相同的列表对象 (list1
) 附加到 result
。您可以通过在 运行 循环之后执行类似 list1.append(True)
的操作并再次检查 result
来验证这一点:
[['node1', 'node2', 'node3', 'node4', True],
['node1', 'node2', 'node3', 'node4', True],
['node1', 'node2', 'node3', 'node4', True]]
您要做的是每次追加 list1
的 make a copy,例如:
for i in range (len(list2)):
list1.append(list2[i])
result.append(list(list1))
list1.pop()
尽管我可能会改为使用列表串联,这会隐式地生成一个新列表:
for item in list2:
result.append(list1 + [item])
有 2 个给定列表,假设:
list1 = ['node1','node2','node3','node4']
list2 = ['goal1','goal2','goal3']
我需要一个列表 returns:
result = [['node1','node2','node3','node4','goal1'],
['node1','node2','node3','node4','goal2'],
['node1','node2','node3','node4','goal3']]
这是我的:
result = []
for i in range (len(list2)):
list1.append(list2[i])
result.append(list1)
list1.pop()
问题是,结果没有附加所需的值。它打印,
[['node1', 'node2', 'node3', 'node4'],
['node1', 'node2', 'node3', 'node4'],
['node1', 'node2', 'node3', 'node4']]
在 for
循环完成后。
我做错了什么?
您可以使用 extend
解决此问题:
>>> for i in range(len(list2)):
tmp = []
tmp.extend(list1)
tmp.append(list2[i])
all_paths.append(tmp)
>>> all_paths
[['node1', 'node2', 'node3', 'node4', 'goal1'], ['node1', 'node2', 'node3', 'node4', 'goal2'], ['node1', 'node2', 'node3', 'node4', 'goal3']]
您可以使用列表组合将 list1
每个目标添加到列表 1 的末尾:
list1 = ['node1', 'node2', 'node3', 'node4']
list2 = ['goal1', 'goal2', 'goal3']
print([list1 + [gl] for gl in list2])
输出:
[['node1', 'node2', 'node3', 'node4', 'goal1'],
['node1', 'node2', 'node3', 'node4', 'goal2'],
['node1', 'node2', 'node3', 'node4', 'goal3']]
您的循环所做的是重复将相同的列表对象 (list1
) 附加到 result
。您可以通过在 运行 循环之后执行类似 list1.append(True)
的操作并再次检查 result
来验证这一点:
[['node1', 'node2', 'node3', 'node4', True],
['node1', 'node2', 'node3', 'node4', True],
['node1', 'node2', 'node3', 'node4', True]]
您要做的是每次追加 list1
的 make a copy,例如:
for i in range (len(list2)):
list1.append(list2[i])
result.append(list(list1))
list1.pop()
尽管我可能会改为使用列表串联,这会隐式地生成一个新列表:
for item in list2:
result.append(list1 + [item])