在显示的代码中,val
变量的值ar[0]
为10。但是在for循环1次迭代之后,val
的值发生了变化。为什么会改变?所有迭代都会发生这种情况。
import math
import os
import random
import re
import sys
n = int(input())
ar = list(map(int,input().split()))
#print(len(ar))
while len(ar)!=0:
val=ar[0]
#print(val)
#ar.remove(val)
#print(ar)
for val in ar:
print(val)
ar.remove(val)
print(ar)
> 10 [30, 20, 10, 10, 20, 50, 10, 20]
> 20 [30, 10, 10, 20, 50, 10, 20]
> 10 [30, 10, 20, 50, 10, 20]
> 50 [30,10, 20, 10, 20]
> 20 [30, 10, 10, 20]
> 30 [10, 10, 20]
> 10 [10, 20]
> 10 [20]
> 20 []
答案 0 :(得分:0)
您的代码段中发生了一些可能令人困惑的事情。
首先要设置val=ar[0]
,然后在for循环中使用它:
val=ar[0]
for val in ar:
print(val)
结果是,在每次for循环迭代中都会重新分配val。
第二个可能令人困惑的地方是for循环中的ar.remove(val)
。因为要在迭代时删除,所以可能导致未指定的行为。
要获得所需的输出,最好使用附加的辅助列表来实现代码:
ar = list(map(int,input().split()))
new_ar[:] = ar
while len(ar)!=0:
for val in ar:
print(val)
new_ar.remove(val)
print(new_ar)
在这个问题中,您想要达到的目标或期望的输出还不是很清楚,但是希望您可以将这两部分结合起来。
答案 1 :(得分:0)
您可以打印ar
的类型:
print(typee(ar)) # --> output : <class 'list'>
因此,代码ar.remove(val)
将元素ar[0]
删除为
val = ar[0]
这给出了为什么每次迭代都会更改val
的值的答案。
答案 2 :(得分:0)
在编写for函数时,需要确保这些条件不变。
让我们看看会发生什么:
您输入的是30, 20, 10, 10, 20, 50, 10, 20
val=ar[0]
是30
然后进入循环
ar.remove(val)
删除第一个val元素,使其成为
20, 10, 10, 20, 50, 10, 20
但是val元素将是新的ar[1]
,即10
这是阵列的概述
30 ,20、10、10、20、50、10、20
20, 10 ,10、20、50、10、20
20,10, 20 ,50,10,20
10,20,50, 10 ,20
因此它存在于for循环中