gpt4 book ai didi

python - 为什么这个切片会抛出 IndexError?

转载 作者:太空宇宙 更新时间:2023-11-04 09:43:15 26 4
gpt4 key购买 nike

我在图表上搜索单词的代码如下:

size = len(word)
height = len(diagram)
width = len(diagram[0])
for i in range(0, height):
for j in range(0, width):
if (diagram[i][j] == word[0]):
if (i + size < height):
print(i, size, i+size, height)
test = diagram[i:(i+size)][j]
(...)

打印显示

1, 2, 3, 4

搜索词

hi

在下图中:

x x x x
x x h x
x i x x
x x x x

或者,以列表形式:

[['x', 'x', 'x', 'x'], ['x', 'x', 'h', 'x'], ['x', 'i', 'x', 'x'], ['x', 'x', 'x', 'x']]

它在切片时抛出一个IndexError: list index out of range。我不明白为什么,因为 [i, (i+size-1)] = [1, 2] 在列表边界 [0, 4] 内。

最佳答案

在行test = diagram[i:(i+size)][j]您没有在 [i:(i+size)] 上收到索引错误但在 [j] .切片后,diagram[i:(i+size)]是两个列表的列表,j2 ,因此那个索引超出范围。

另请注意 [j]将索引到该列表列表中,而不是单个列表中,即它会给你一行,而不是图表的一列。很可能,您需要对切片进行列表理解,获取 j每行的第th个元素:

test = [line[j] for line in diagram[i:(i+size)]]

或者您可以使用 numpy并且是多维切片:

import numpy as np
diagram = np.array(diagram)

然后使用 [...,...]而不是 [...][...] :

test = diagram[i:(i+size),j]

但这并不能真正允许从矩阵中提取对角线,这似乎是查找单词所需要的(假设这就是您想要的)。为此,您可以再次使用列表理解并将它们与 enumerate 结合使用获取当前字母的位置并相应地偏移它:

test = [line[j-c] for c, line in enumerate(diagram[i:(i+size)])]
# ['h', 'i']

关于python - 为什么这个切片会抛出 IndexError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50886409/

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