簡體   English   中英

在python中的2D列表(矩陣)范圍內進行迭代

[英]Iterating within bounds of a 2D list (matrix) in python

我想遍歷2D列表。 我了解可以使用以下方法做到這一點:

for j in range(columns):
     for i in range(rows):
        print depth[i][j],

但是有沒有更美麗的方法。 我試過了:

for (x in range(rows)) and (y in range(columns)):
     print(depth[x][y])

但這給了我一個IndentationError

謝謝

編輯:如果我想為x和y設置邊界怎么辦。 假設我有一個4x4矩陣(使用列表表示)。 對於給定的元素,我想在其周圍獲得3x3矩陣,但我希望保持在原始矩陣的范圍內。 假設我在(3,1),取x = range(3-2, 3+3) = [1,2,3,4,5] y = range(1-2,1+3) = [-1, 0, 1, 2, 3] x = range(3-2, 3+3) = [1,2,3,4,5]y = range(1-2,1+3) = [-1, 0, 1, 2, 3]將我帶到原始矩陣的范圍之外。

您可以使用itertools.product ,也可以編寫一個雙循環generator-expression,例如:

for (i,j) in ( (i,j) for i in range(rows) for j in range(columns) ):
    print depth[i][j]

要么

for d in ( depth[i][j] for i in range(rows) for j in range(columns) ): ...

另外,如果您實際上不需要索引,而僅需要遍歷depth ,則可以執行以下操作:

for row in depth:
   for v in row:
      print

即使您確實需要索引,使用enumerate還是更Python化:

for row_index, row in enumerate(depth):
   for col_index, v in enumerate(row):
      print 'depth[%d][%d]=%s' % (row_index, col_index, v)

這可以通過以下方式完成:

for depth in (depth[x][y] for x in range(rows) for y in range(columns)):
    print depth

編輯:

如果您想要界線,則可以使用minmax內置函數:

for x in range( max(x_min,col-2), min(x_max,col+3) ):
    #do stuff

暫無
暫無

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

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