为什么我有两个不同的结果,在 python 中应用相同的代码?

Why I am having two different outcomes, applying same code in python?

我开发了很长的逻辑来获得特定的结果,从中我可以附加带有嵌套非列表元素的嵌套列表。非常简单的过程,但我在解释器中得到的结果非常奇怪。因此,我想来这里获得有关如何解决此类问题的有用见解。

为了用技术术语解释我的代码,我的意思是:

我有一个名为 result 的变量,如果在其中打印,我会得到以下内容:

输入:

print(result)

输出:

[[['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']], ['1', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']]], [['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']], ['1', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']]]]

如果我申请循环,追加嵌套列表,我的输入将是:

for i in result:
    for x in i:
        x[-1].append(x[0])

print(result)

结果:

[[['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1', '2', '1']], ['1', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1', '2', '1']]], [['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1', '2', '1']], ['1', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1', '2', '1']]]]

我想要达到的期望结果:

[[['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1', '2']], ['1', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1', '1']]], [['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1', '2']], ['1', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1', '1']]]]

我只能通过使用新变量创建一个新的解释器文件来获得所需的结果,处理结果的输出,从当前文件获得所需的结果。那么,我的逻辑是怎么回事导致了这样的问题?

请注意,这不是一个重复的问题,我不是在问如何从技术上解决它;我想知道是什么导致代码中的这种行为在两个文件中应用相同的逻辑给我两个不同的结果?

另请注意,我使用 visual studio 代码作为我的解释器

您正在将列表 x 的第一个值附加到上一个条目。

发生这种情况是因为 Python 列表是可变的(edited/updated 也是可变的)并且您正在更新列表 x[-1],它本身是列表 x 的一个条目,它是一个列表 i 的条目是列表结果的条目。

for i in result:
    for x in i:
        breakpoint()  # breaks at the first x in the first i list to evaluate what happens
        # x = ['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']
        # x[0] = '2'
        # x[-1] = ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']
        x[-1].append(x[0])

print(result)

结果我拿了:

result = [
    [
        ['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']],
        ['1', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']]
    ],
    [
        ['2', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']],
        ['1', ['Length_PanelSet_2_Plan_2', 'Length_PanelSet_1_Plan_1_with_Hinged_Comments', 'Length_PanelSet_1_Plan_1']]
    ]
]