如何迭代二维lis的一部分

2024-03-29 06:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想浏览2D列表的一部分,而不是整个列表。 基本上我想做的是: 假设用户输入坐标[1,1](因此,第1行第1列) 如果我有2D列表:

[[1,3,7],
[4,2,9],
[13,5,6]]

然后我想遍历与[1,1]处的元素相邻的所有元素

此外,如果元素位于2D列表的一角或边缘(例如,基本上如果用户输入[0,0],),那么我只想返回[0,0][0,1][1,0][1,1]处的元素

所以本质上我只需要在二维数组的某个点上,与某个特定点相邻的元素。你知道吗

以下是我迄今为止所做的: 我这样做是为了它在代码的开头指定4个变量:starting_rowending_rowstarting_columnending_column。这些变量是根据用户想要输入的坐标赋值的(如果行是0或len(list)),则for循环相应地运行。列也是如此)。 然后,我使用嵌套for循环遍历每个元素

for row in range(row_start, row_end+1):
        for column in range(column_start, column_end+1):
            print(lst[row,column])            

唯一的问题是,它似乎无法正常工作,当输入超过3x3个元素的列表大小时,它通常会输出整个2D列表(所有列表都是正方形列表)


Tags: 用户in元素列表forendingrangecolumn
1条回答
网友
1楼 · 发布于 2024-03-29 06:22:53

可以根据给定的行和列对列表列表进行切片。对于下界,使用max0避免使用负索引进行切片,但对于上界则不是这样,因为切片的停止索引可以超出列表的范围:

def get_adjacent_items(matrix, row, col):
    output = []
    for r in matrix[max(row - 1, 0): row + 2]:
        for i in r[max(col - 1, 0): col + 2]:
            output.append(i)
    return output

或者,用一个列表:

def get_adjacent_items(matrix, row, col):
    return [i for r in matrix[max(row - 1, 0): row + 2] for i in r[max(col - 1, 0): col + 2]]

因此:

m = [[1, 3, 7],
     [4, 2, 9],
     [13, 5, 6]]

get_adjacent_items(m, 0, 0)返回:[1, 3, 4, 2]

get_adjacent_items(m, 1, 1)返回:[1, 3, 7, 4, 2, 9, 13, 5, 6]

get_adjacent_items(m, 2, 1)返回:[4, 2, 9, 13, 5, 6]

get_adjacent_items(m, 2, 2)返回:[2, 9, 5, 6]

相关问题 更多 >