在for循环中追加列表?

2024-05-09 01:04:47 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有两个给定列表:

list1 = ['node1','node2','node3','node4']
list2 = ['goal1','goal2','goal3']

我需要一个列表,其中返回:

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循环完成之后。你知道吗

我做错什么了?你知道吗


Tags: in列表forrangeresultappendlist2node1
3条回答

循环所做的是重复地将相同的list对象(list1)附加到result。在运行循环并再次检查result之后,可以通过执行类似于list1.append(True)的操作来验证:

[['node1', 'node2', 'node3', 'node4', True], 
 ['node1', 'node2', 'node3', 'node4', True], 
 ['node1', 'node2', 'node3', 'node4', True]]

您要做的是每次附加make a copy而不是list1,例如:

for i in range (len(list2)):
    list1.append(list2[i])
    result.append(list(list1))
    list1.pop()

尽管我可能会使用列表串联,它隐式地生成一个新列表:

for item in list2:
    result.append(list1 + [item])

您可以使用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']]

您可以使用list comp将list1每个目标添加到list1的末尾:

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']]

相关问题 更多 >