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

时间:2019-01-10 02:36:43

标签: python

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

3 个答案:

答案 0 :(得分:1)

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

位置1 将存储两个for循环的所有输出,这意味着分别对i = 0j = 0, 1, 2i = 1,{{ 1}}

位置2 将两次重新初始化列表,因为您的外部循环运行了两次。因此它将存储与j = 0, 1, 2i = 1对应的数据,因为j = 0, 1, 2的列表将被覆盖。

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

答案 1 :(得分:0)

每次执行results=[]时,都会覆盖该变量。保存在其中的所有先前结果都将被丢弃。

如果在所有循环之前执行此操作,则最终内容将来自所有循环迭代。

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

如果在最内部的循环中执行此操作,则仅从所有迭代中获取最后一个值。

答案 2 :(得分:0)

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

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重置为空列表{ {1}},然后再附加下一个值[]