はい、隣接する要素も提供する要素を反復処理できる、より複雑なものを作成しない限り、要素の絶対アドレス指定を使用する必要があります。
リストのリストを常に使用することが確実な場合 (つまり、他の iterable だけでなく)、 を使用しenumerate
て、インデックスと要素自体の両方をすばやく取得できます。
for i, row in enumerate(data):
for j, cell in enumerate(row):
# now you can access data[i][j-1], data[i+1][j] etc
そこで、「より複雑な」ことについて最初に述べました。できることは、セルを自動的に反復処理し、たとえば左隣などの追加データを返すジェネレータを作成することです。
def myLeftNeighborGenerator(data):
for i, row in enumerate(data):
for j, cell in enumerate(row):
leftNeighbor = data[i][j-1] if j > 0 else None
yield cell, leftNeighbor
次に、そのジェネレーターを使用して魔法のようにデータを取得できます。
for x, left in myLeftNeighborGenerator(data):
if x[0][0] == 'f':
x[0][1] += 1
if left is not None:
# whatever