簡體   English   中英

如何遍歷二維列表的一部分

[英]How to iterate through a section of a 2D list

我想通過 2D 列表的一部分而不是整個內容來 go。 這基本上是我想要做的:假設用戶輸入坐標[1,1] (所以,第 1 行第 1 列)如果我有 2D 列表:

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

然后我想遍歷與[1,1]處元素相鄰的所有元素

此外,如果元素位於二維列表的角落或邊緣,(例如,基本上如果用戶輸入[0,0],那么我只想取回[0,0]處的元素, [0,1] , [1,0][1,1]

所以基本上我只想要與二維數組中某個特定點相鄰的元素。

這是我到目前為止所做的:我已經做到了,它在代碼的開頭分配了 4 個變量: starting_rowending_rowstarting_columnending_column 這些變量根據用戶想要輸入的坐標分配值(如果它們的行是 0 或 len(list) 則 for 循環相應地運行。列也是如此)。 然后,我通過每個元素使用嵌套的 for 循環到 go

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

唯一的問題是,當輸入超過 3x3 元素的列表大小時,它似乎無法正常工作並且經常輸出整個 2D 列表(所有列表都是方形列表)

您可以根據給定的行和列對列表列表進行切片。 對於下限,使用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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM