无法在循环内编辑列表项

时间:2019-04-04 03:31:48

标签: python python-3.x list

我正在尝试通过编辑列表来解决问题,该列表跟踪学校中已打开和关闭的储物柜,我得到的代码如下:

y = list()
lockers = 100
students = 100
s = 2
i = 0
while i < lockers:
    y.append("O")
    i = i + 1
w = len(y)
while s <= students:
    for x in range(s, w, s):
        if y[x] == "O":
            y[x] = "C"
        if y[x] == "C":
            y[x] = "O"
    s = s + 1
openLockers = y.count("O")
print(openLockers)

代码运行流畅,没有任何错误,但是返回的值为100。我已经对每个变量进行了故障排除,并且都对其进行了修改。我的结论是,问题出在线

y[x] = "C"

y[x] = "C"

在这些行之后,列表完全没有改变。

我添加了w以便不使用range函数中的len(y)并且不能使用

for i in y

因为我需要在循环y中的各个项目之间迈出一步。

我希望能够在循环内修改列表中的项目或使用解决方法...

2 个答案:

答案 0 :(得分:5)

您的代码还有其他一些地方可以简化,但是您真正的问题在for循环内:

if y[x] == "O":
    y[x] = "C"
if y[x] == "C":
    y[x] = "O"

如果储物柜是打开的,则将其设置为关闭。然后,立即执行下一个if语句,将其设置回打开状态。因此,您似乎没有更改y。将第二个if语句更改为elif语句:

if y[x] == "O":
    y[x] = "C"
elif y[x] == "C":
    y[x] = "O"

这应该可以解决您的问题。


现在,这是独立且不必要的,但会大大简化您的代码。试试这个(使用布尔状态而不是字母):

lockers = 100
students = 100
y = [False] * lockers

for s in range(2, students):
    for x in range(s, lockers, s):
        y[x] = not y[x]

openLockers = y.count(False)
print(openLockers)

答案 1 :(得分:1)

假设std::shared_ptr只有两个可能的值,分别是y[x]'O',则可以在代码中使用以下简化形式:

'X'