如何使用这种格式的代码获取上一个或下一个对象?
alignment = [[a,b,c],[2,3,4],[q,w,e]]
for obj in alignment:
some code here to get previous object
我知道怎么做:
for i in range(0,len(alignment)):
alignment[i-1][objIndex]
答案 0 :(得分:12)
您可以使用enumerate
:
alignment = [[a,b,c],[2,3,4],[q,w,e]]
for index,obj in enumerate(alignment):
alignment[index-1] # pre
alignment[index+1] # next
注意作为访问next
项并拒绝多重索引的更有效方法,您可以使用iter()
函数从列表中创建迭代器对象(来自第二个元素结束)并使用next
访问每次迭代中的下一个元素:
>>> l=[1,2,3,4]
>>> it=iter(l[1:])
>>> for i in l :
... print i,next(it,None)
...
1 2
2 3
3 4
4 None
注意如果您未将None
作为第二个参数传递给next()
函数,则会引发StopIteration
错误。您可以也可以使用try-except
语句来处理它。
同样对于短名单,您可以使用zip
函数和长列表itertools.izip()
function(python 3中的zip
):
>>> for i,j in zip(l,l[1:]):
... print i,j
...
1 2
2 3
3 4
zip(l,l[1:])
会为您提供以下几项:
[(1, 2), (2, 3), (3, 4)]
并且在循环中,您可以使用i
作为当前项目,然后j
将成为下一个项目,或者使用j
作为当前项目,然后i
将是之前的项目!:)
答案 1 :(得分:1)
根据您对邻居条目的使用情况,有许多不同的选项。例如,如果您只想处理对,而不是修改列表:
for left,right in zip(somelist[:-1], somelist[1:]):
pass
或者,如果您需要保留先前的条目作为参考:
prev = None
for item in somelist:
pass
prev = item
None
此处用于代替第一项的先前项目,类似于它在Kasra的基于iter()的示例中用于下一项之后的下一项目。
答案 2 :(得分:0)
for index, obj in enumerate(alignment):
alignment[index-1]
循环将为索引和对象提供前一个对象可以被(当前索引 - 1)访问而下一个对象可以访问(当前索引+ 1)