代码如下:
n = int(input())
arr = input().split()
arr = [int(x) for x in arr]
smallest = 1001
while(True):
if smallest==0:
break
arr.sort()
count = 0
smallest = arr[0]
for i in arr:
if i==0:
arr.remove(i)
i-=smallest #This statement.
count+=1
print(count)
对于输入: (n=)6 和 (arr=)5 4 4 2 2 8 我得到的输出是: 6 6 6... 然而,根据我的说法,如果我的逻辑有效(并且上述语句实际上编辑了我的原始数组元素),那么输出应该是 6 4 2 1 相反。
我可能把整个事情搞错了。我是业余爱好者。感谢任何形式的帮助。
最佳答案
让我们看看内部循环
for i in arr:
if i==0:
arr.remove(i)
i-=smallest
count+=1
它将arr
中的第一个值分配给i
。由于数组的值都不为零,因此它不会从列表中删除任何内容。
然后它通过减去最小值来重新分配 i 的值。第一次通过循环时,它将零值分配给 i。然后它增加计数。列表arr
未更改。 i=-smallest
行无效,因为 i
被重新分配给列表的下一个值。
因此,对于值 5 4 4 2 8 8(其中都不为零),该循环相当于
for i in arr:
count+=1
这就是为什么它总是打印 6。我不确定为什么你认为它应该打印 6 4 2 1。我怀疑你认为列表正在被更改,但是行 if i==0
始终为 false。
更改 for 循环中迭代的对象肯定会让您感到困惑。几乎肯定有更好的方法来实现您想要的。例如,参见Remove items from a list while iterating
关于python - 使用下面代码中的 "i-=smallest"语句,我打算更改原始数组 arr,但这并没有发生。我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667130/