【问题标题】:Can't edit list items inside loop无法编辑循环内的列表项
【发布时间】:2019-04-04 03:31:47
【问题描述】:

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

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"

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

为了不在 range 函数中使用 len(y) 而添加了 w,我不能使用

for i in y

因为我需要在循环y 中的项目之间进行一步。

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

【问题讨论】:

    标签: python python-3.x list


    【解决方案1】:

    您的代码还有其他一些可以简化的地方,但您真正的问题是在 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)
    

    【讨论】:

    • 哇...我不敢相信我没听懂。非常感谢!
    • @MichelChalfoun 如果您有兴趣,我编辑并添加了一些可能对您有用的代码以用于学习目的。 :)
    • 谢谢!我不知道将列表乘以整数会这样做,是的,使用布尔值看起来要好得多。
    【解决方案2】:

    假设您只有两个可能的 y[x] 值,即 'O''X',您可以在代码中使用以下简化:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2023-02-23
      • 2013-12-31
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多