gpt4 book ai didi

python - 使用下面代码中的 "i-=smallest"语句,我打算更改原始数组 arr,但这并没有发生。我该怎么办?

转载 作者:行者123 更新时间:2023-12-01 03:40:43 24 4
gpt4 key购买 nike

代码如下:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com