我有一份清单清单(最后一个清单并不重要)
data = [[[['f', 0], 'C'], [['X', 0], 'X']],
[[['s', 1], 'X'], [['X', 0], 'X']]]
它本质上是一个有4个象限的地图。目前我正在迭代它并用
更新它for i in data:
for x in i:
if x[0][0] == 'f':
x[0][1] += 1
但我想检查一个小区的邻居。有没有办法做到这一点,当迭代这个或我必须解决通过整数键移动列表?
答案 0 :(得分:4)
是的,除非你写一些更复杂的东西,允许你迭代那些也给你邻居的元素,你将不得不使用元素的绝对寻址。
如果您确定始终使用列表列表(即不仅仅是其他可迭代列表),您当然可以使用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
答案 1 :(得分:2)
如果您不想担心必须自己跟踪整数键,但仍想使用它们,则python具有built in function enumerate
。
>>> for index, value in enumerate(['my','list','of','stuff']):
... print index, value
0 my
1 list
2 of
3 stuff
enumerate
函数在for
循环的每次迭代中将项目的索引与该项目配对。