如何在这个地方获得下一个obj

时间:2011-02-16 06:11:46

标签: python loops

这是我的python代码:

a=['aaa','bbb','oooo','qqqq','gggg']
for i in a:
    print i #how to get the next obj in this  place .

我希望在获得i元素

时获取下一个代码

感谢

3 个答案:

答案 0 :(得分:2)

您可以使用the zip function同时获取for循环中列表中的当前项和下一项。因此for循环遍历列表并且列表同时偏移1:

for this,after in zip(a,a[1:]):
    print this,after

但是,zip会在最短列表的末尾停止,因此您无法处理列表的最后一个元素。如果这是一个问题,请使用izip_longest from itertools

import itertools
for this,after in itertools.izip_longest(a,a[1:]):
    print this,after

在这种情况下,after对于列表中的最后一项将为None

izip_longest是在Python 2.6中引入的,所以如果您运行的是早期版本,可以通过将None附加到较短列表的末尾来手动实现相同的效果:

for this,after in zip(a,a[1:] + [None]):
    print this,after

您可以在Django模板中使用{% for x, y in somelist %},但您需要在模型中执行zip并将其存储在传递给模板的变量中。

答案 1 :(得分:1)

为此枚举列表更容易:

a=['aaa','bbb','oooo','qqqq','gggg']

for idx, item in enumerate(a):
    print item
    if idx < len(a)-1:
       print a[idx+1]

(编辑:已修复IndexError

答案 2 :(得分:0)

>>> def twobytwo(it, last_single=False):
...     guard = object()
...     oe = guard
...     for e in it:
...         if oe != guard:
...             yield oe, e
...         oe = e
...     if oe != guard and last_single:
...         yield oe, None
... 
>>> for a, b in twobytwo(['aaa','bbb','oooo','qqqq','gggg']):
...     print a, b
... 
aaa bbb
bbb oooo
oooo qqqq
qqqq gggg
>>> for a, b in twobytwo(['aaa','bbb','oooo','qqqq','gggg'], last_single=True):
...     print a, b
... 
aaa bbb
bbb oooo
oooo qqqq
qqqq gggg
gggg None
>>>