Python For循环存储旧的变量值?

Python For循环存储旧的变量值?,python,python-3.x,Python,Python 3.x,我正在尝试从LeetCode实现ZigZag。不知何故,在第二次递归调用期间,“addElements”中的第二个for循环保留了上次调用的值。为什么会发生这种情况 我分享了下面的输出-我的问题是关于beg和end如何保持相同的值直到3,然后beg按照预期移动到6,但end保持在3 输入:“PayPalishering”4 输出:“PINALSIGYAHRGPIG” 预期:“PINALSIGYAHRPI” 因为for循环的最后一个元素存储最后一个变量。 要使您没有该变量类型del variab

我正在尝试从LeetCode实现ZigZag。不知何故,在第二次递归调用期间,“addElements”中的第二个for循环保留了上次调用的值。为什么会发生这种情况

我分享了下面的输出-我的问题是关于beg和end如何保持相同的值直到3,然后beg按照预期移动到6,但end保持在3

输入:“PayPalishering”4

输出:“PINALSIGYAHRGPIG”

预期:“PINALSIGYAHRPI”


因为for循环的最后一个元素存储最后一个变量。
要使您没有该变量类型
del variable
,如果您尝试在不重新分配新值的情况下使用该变量,它将抛出一个错误

,问题似乎是此块:

    for i in range(1, self.numRows - 1):
        if count > len(self.s) - 1:
            break

        self.final_grid[self.numRows - i - 1][column + i] = self.s[count]
        count += 1
        print(column, "end")
        self.addElements(count, column + self.numRows - 1)
在这里,您将对循环中的每个元素进行递归。你可能是说:

def addElements(self, count, column):
    for i in range(self.numRows):
        if count >= len(self.s):
            return # <-- return instead of break

        self.final_grid[i][column] = self.s[count]
        count += 1

    for i in range(1, self.numRows - 1):
        if count >= len(self.s):
            return # <-- return instead of break

        self.final_grid[self.numRows-i-1][column+i] = self.s[count]
        count += 1

    self.addElements(count, column + self.numRows - 1)
    #^^^ move this outside of the loop
使用:

而不是:

    final_arr = []
    for i in self.final_grid:
        final_arr += i

    final_word = ''
    for i in final_arr:
        if i != "":
            final_word += i

    return (final_word)
    row = [''] * len(s)
考虑:

    row = [''] * ((len(s) // 2) + 1)

你能更具体地描述一下这个问题吗?@ScottHunter-sure,在issueThanks上用更多颜色编辑!!然而,一个小小的变化是,我必须在新移动的函数调用之前添加一个额外的“if”检查-否则该函数被称为infinitelyYep-我只是添加了一个注释,该函数的组织有点笨拙-您必须进行各种
计数
    return "".join(map("".join, self.final_grid))
    row = [''] * len(s)
    row = [''] * ((len(s) // 2) + 1)