gpt4 book ai didi

python - 如何修复 ZigZag 问题中的 'list index out of range' 错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:37:17 24 4
gpt4 key购买 nike

在使用列表列表方法解决 ZigZag 问题 (https://leetcode.com/problems/zigzag-conversion/) 时,第 6 行出现列表索引超出范围错误。为什么会出现这样的错误?

def convert(self, s, numRows):
row=0
down=True
rows=[[] for i in range(numRows)]
for i in range(len(s)):
rows[row].extend(s[i])
#print(rows)
if(row==0):
down=True
elif(row==len(s)-1):
down=False
if down:
row+=1
else:
row-=1
st=[]
for k in rows:
st+=k
return ''.join(st)

最佳答案

错误是因为你比较了(row==len(s)-1)。现在 s 是字符串,而不是行数,所以对于大于行数的字符串,最终 row 会大到超出边界。

也就是说,我们可以有效地改进代码。我们知道我们分配第 i 个元素的 ri 行是一个序列 0, 1, ... , n-1, n-2, ..., 0, 1, ...。所以我们可以为此定义一个函数:

def pingpong(n):
while True:
yield from range(n)
yield from range(n-2, 0, -1)

例如:

>>> list(islice(pingpong(3), 14))
[0, 1, 2, 1, 0, 1, 2, 1, 0, 1, 2, 1, 0, 1]
>>> list(islice(pingpong(4), 14))
[0, 1, 2, 3, 2, 1, 0, 1, 2, 3, 2, 1, 0, 1]

然后我们可以在 pingpong 函数的每一行附加相应的字符:

def zigzag(text, numRows):
rows = [[] for _ in range(numRows)]
for ri, c in zip(pingpong(numRows), text):
rows[ri].append(c)
return ''.join(map(''.join, rows))

这给了我们:

>>> zigzag('PAYPALISHIRING', 3)
'PAHNAPLSIIGYIR'
>>> zigzag('PAYPALISHIRING', 4)
'PINALSIGYAHRPI'

我将上述方法提交到 LeetCode 题目中,并被接受(所有测试用例都成功)。

关于python - 如何修复 ZigZag 问题中的 'list index out of range' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56331539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com