Python For循环存储旧的变量值?
我正在尝试从LeetCode实现ZigZag。不知何故,在第二次递归调用期间,“addElements”中的第二个for循环保留了上次调用的值。为什么会发生这种情况 我分享了下面的输出-我的问题是关于beg和end如何保持相同的值直到3,然后beg按照预期移动到6,但end保持在3 输入:“PayPalishering”4 输出:“PINALSIGYAHRGPIG” 预期:“PINALSIGYAHRPI”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
因为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)