获取没有len的前一个对象(列表)

Rad*_*vić 8 python list

如何使用这种格式的代码获取上一个或下一个对象?

alignment = [[a,b,c],[2,3,4],[q,w,e]]

for obj in alignment:
    some code here to get previous object
Run Code Online (Sandbox Code Playgroud)

我知道如何做到这一点:

for i in range(0,len(alignment)):
    alignment[i-1][objIndex]
Run Code Online (Sandbox Code Playgroud)

Kas*_*mvd 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
Run Code Online (Sandbox Code Playgroud)

请注意,作为访问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
Run Code Online (Sandbox Code Playgroud)

请注意,如果您没有将None第二个参数传递给next()函数,则会引发StopIteration错误.您也可以使用try-except语句处理它.

对于短列表,您可以使用zip函数和长列表itertools.izip()函数(zip在python 3中):

>>> for i,j in zip(l,l[1:]):
...   print i,j
... 
1 2
2 3
3 4
Run Code Online (Sandbox Code Playgroud)

zip(l,l[1:]) 会给你以下几项:

[(1, 2), (2, 3), (3, 4)]
Run Code Online (Sandbox Code Playgroud)

并且在循环中你可以i用作当前项目然后j将是下一个项目或j用作当前然后i将是前一个!:)