[英]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_row
、 ending_row
、 starting_column
和ending_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 列表(所有列表都是方形列表)
您可以根據給定的行和列對列表列表進行切片。 對於下限,使用max
和0
來避免使用負索引進行切片,但對於上限則不然,因為切片的停止索引超出列表范圍是可以的:
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.