这是我的python代码:
a=['aaa','bbb','oooo','qqqq','gggg']
for i in a:
print i #how to get the next obj in this place .
我希望在获得i
元素
感谢
答案 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
>>>