2011-02-16 46 views
0

这是我的Python代码:如何获得下一个OBJ在这个地方

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

我想接下来的代码时,我得到i元素,

感谢

+0

我不明白你想要什么。显示输出应该是什么样子。 – 2011-02-16 08:00:32

回答

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 

在这种情况下afterNone在列表的最后一个项目。

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

您可以使用{% for x, y in somelist %}

izip_longest通过在较短列表的末尾附加None在Python 2.6,所以如果你正在运行的早期版本,你可以实现用手同样的效果介绍在Django模板中,但您需要在模型中执行zip并将其存储在传递给模板的变量中。

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

+0

一旦它碰到最后一个元素,它就会崩溃。 – 2011-02-16 06:16:21

+0

可以用于django模板。 http://stackoverflow.com/questions/5012973/how-to-get-the-next-obj-when-loop-the-django-model – zjm1126 2011-02-16 06:36:20

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 
>>>