为数组中的元素赋值会更改其他变量

时间:2018-02-14 02:44:35

标签: python

我一直在学习计算机竞赛,当我正在研究一个看似微不足道的问题时,我遇到了一些意想不到的行为。我确定答案很简单,但对于我的生活,我无法理解。

问题是:https://dmoj.ca/problem/ccc14s1

这是我的计划:

import math

K = int(input())
m = int(input())
r_i = []

for i in range(m):
    r_i.append(int(input()))

friends = [x+1 for x in range(K)]
print(r_i)
for j in r_i:
    instances = int(math.floor(friends[-1] / j))
    for k in range(instances):
        friends[j*(k+1) - 1] = -1

for n in friends:
    if(n != -1):
        print(n)

问题是,在循环for j in r_i一次之后,instances的计算结果为-1。我发现删除行friends[j*(k+1) - 1] = -1将解决问题但我无法理解为什么将值-1分配给friends中的元素会影响instances的值下一次迭代。

1 个答案:

答案 0 :(得分:0)

从您给出的链接中获取样本输入:

10
2
2
3

在第一个循环中:

for j in r_i:
    instances = int(math.floor(friends[-1] / j))
    for k in range(instances):
        friends[j*(k+1) - 1] = -1

您将friends设置为

[1, -1, 3, -1, 5, -1, 7, -1, 9, -1]
                                ^^

因此,在下一个循环中,当您尝试获取friends[-1]时,您将获得上面指出的值。毫无疑问,它是-1

您应该在设置一次后清除所有-1

for j in r_i:
    instances = int(math.floor(friends[-1] / j))
    for k in range(instances):
        friends[j*(k+1) - 1] = -1
    friends = [i for i in friends if i != -1]