解释为什么3个不同位置的“结果”有不同的输出?

2024-09-30 20:30:44 发布

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

#Position1: 
#results=[]
for i in range(2):
    #Position2:
    results=[]
    for j in range(3):
        #Position3:
        #results=[]
        results.append(i+j)
print(results)

Tags: inforrangeresultsprintappendposition2position3
3条回答

每次执行results=[]都会覆盖变量。以前保存在其中的任何结果都将被丢弃。你知道吗

如果在所有循环之前执行,则最终内容将来自所有循环迭代。你知道吗

如果在任何循环中执行,则会丢弃该循环以前迭代的所有结果。最终值将来自该循环的最后一次迭代。你知道吗

如果在最内部的循环中执行,则只需从所有迭代中获取最后一个值。你知道吗

这是不同的,因为results=[]只是将列表重新初始化为空列表。因此,一旦代码执行results=[],存储在其中的所有数据都将被擦除。这取决于初始化此列表的位置。所有三个位置都处于for循环的不同级别,因此输出是不同的。你知道吗

位置1将存储两个for循环的所有输出,这意味着i = 0j = 0, 1, 2,然后i = 1j = 0, 1, 2

位置2将重新初始化列表两次,因为外部循环运行两次。因此它将存储对应于i = 1j = 0, 1, 2的数据,因为i = 0的列表将被重写。你知道吗

位置3将重新初始化列表六次,因为外循环运行两次,内循环运行三次(外循环每次迭代三次)。你知道吗

在下面的循环中可以看到正在发生的事情的简化版本:

for i in range(2):
    r = []
    print(f'r == {r} before append in iteration {i+1}')
    r.append(i)
    print(f'r == {r} after iteration {i+1}') 

# OUTPUT
# r == [] before append in iteration 1
# r == [0] after append in iteration 1
# r == [] before append in iteration 2
# r == [1] after append in iteration 2

不是r[0, 1]结束,而是以[1]结束,因为您可以看到,在第一次迭代之后,您将r重置为空列表[],然后再附加i的下一个值。你知道吗

相关问题 更多 >