【问题标题】:List keeps changing even if it is not called即使没有调用列表,它也会不断变化
【发布时间】:2020-07-31 01:52:04
【问题描述】:

当字符串“stringa”的长度等于给列表的第一个 x 值(在本例中为 1023)时,列表“stop”应该包含函数给出的 x 和 y 坐标。列表不应更改一次以上,这要归功于 list bool_stop 跟踪对列表所做的更改,以这种方式在再次更改列表的 x 和 y 值之前(在函数“failapiega”内的while循环) if statemet 将检查列表是否已经更改,如果是则阻止操作。这就是为什么我不明白为什么列表不断改变值。我想在函数的 while 循环之外有什么问题,但我无法检测到。

x = 1
iterations = 10
stringa = "AB"
tot = 2 ** (iterations + 2)
In = tot / 4
stop = [[1, -1], [In - 1, None], [2 * In - 1, None], [3 * In - 1, None], [tot - 1, None]]
# stop[1] --> [1023.0, None] #
bool_stop = [True] * 4


def failapiega(stringa, stop, bool_stop):
    l = len(stringa)
    i = l - 1
    while i >= 0:
        p = stringa[i]
        if p == "A":
            stringa += "B"
            stop[0][0] += 1
        elif p == "B":
            stringa += "C"
            stop[0][1] += 1
        elif p == "C":
            stringa += "D"
            stop[0][0] -= 1
        elif p == "D":
            stringa += "A"
            stop[0][1] -= 1
        if bool_stop[0]:
            if stop[1][0] == len(stringa) - 1:
                bool_stop[0] = False
                stop[1] = stop[0]
        i -= 1
    return stringa, stop, bool_stop


while 0 <= iterations:
    stringa, stop, bool_stop = failapiega(stringa, stop, bool_stop)
    iterations -= 1

调试发现

 if stop[1][0] == len(stringa) - 1:
                bool_stop[0] = False
                stop[1] = stop[0]

这部分只执行一次,尽管 stop[1] 每次都在变化。

【问题讨论】:

  • 因为你已经这样做了:stop[1] = stop[0]stop[0] 和 stop[1] 指的是同一个对象。如果您更改其中一个值,则另一个将更改。可以关联。
  • 非常感谢。我花了 2 天的时间来解决这个问题。
  • 没问题。我会将其转换为答案;我很乐意投票并接受。
  • 顺便说一句,bool_stop = [True] * 4 看起来有点奇怪,因为您只使用 bool_stop[0]
  • 我在后面的代码中访问bool_stop 的其他索引

标签: python string list function while-loop


【解决方案1】:

在做stop[1] = stop[0]stop[0] 和stop[1] 之后指的是同一个对象。如果你改变其中一个的值,另一个就会改变。

您可以执行以下操作来创建单独的对象, stop[1] = list(stop[0])

在处理任何非原语时请注意这一点 https://en.wikiversity.org/wiki/Python_Concepts/Basic_data_types#Primitive_Variables

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2020-05-06
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多