多維數組我創建Python中的多維數組是這樣的:迭代通過在Python
self.cells = np.empty((r,c),dtype=np.object)
現在我想通過我的二維數組的所有元素進行迭代,我不關心順序。我如何實現這一目標?
多維數組我創建Python中的多維數組是這樣的:迭代通過在Python
self.cells = np.empty((r,c),dtype=np.object)
現在我想通過我的二維數組的所有元素進行迭代,我不關心順序。我如何實現這一目標?
很明顯你正在使用numpy。隨着numpy的你可以做:
for cell in self.cells.flat:
do_somethin(cell)
只是遍歷一個維度,然後是另一個維度。
for row in self.cells:
for cell in row:
do_something(cell)
當然,只有兩個維度,可以壓縮下來到使用list comprehension或發電機表達一個循環,但是這不是很可擴展性和可讀性:
for cell in (cell for row in self.cells for cell in row):
do_something(cell)
如果您需要將這個尺寸縮放到多個維度並且真的需要一個平面列表,您可以write a flatten
function。
如何:
import itertools
for cell in itertools.chain(*self.cells):
cell.drawCell(surface, posx, posy)
如果您需要更改個別單元格的值,然後ndenumerate(在numpy的)是你的朋友。即使你不這樣做,它可能仍然是!
for index,value in ndenumerate(self.cells):
do_something(value)
self.cells[index] = new_value
你可以得到每個元素的索引以及使用枚舉命令元素本身:
for (i,row) in enumerate(cells):
for (j,value) in enumerate(row):
print i,j,value
i
,j
包含元素和value
的行和列索引元素本身。
沒有人有答案,將工作形式任意許多方面沒有numpy的,所以我會放在這裏,我用
def iterThrough(lists):
if not hasattr(lists[0], '__iter__'):
for val in lists:
yield val
else:
for l in lists:
for val in iterThrough(l):
yield val
for val in iterThrough(
[[[111,112,113],[121,122,123],[131,132,133]],
[[211,212,213],[221,222,223],[231,232,233]],
[[311,312,313],[321,322,323],[331,332,333]]]):
print(val)
# 111
# 112
# 113
# 121
# ..
這不會有很好的錯誤檢查遞歸解決方案,但它適用於我
你說錯了。它應該是:對於單元格中的[行中的行在cell.cells中的行中]:do_something(cell) – xApple 2011-09-29 11:18:51
哇,這個答案是古老的。你是對的;將修復。 – Eevee 2011-09-29 17:30:23
他不是很好嗎?它只是一個生成器表達式,而不是列表理解......我錯過了什麼? O.o – 2011-10-02 11:20:15