как получить следующий объект в этом месте - PullRequest
0 голосов
/ 16 февраля 2011

это мой код Python:

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

я хочу получить следующий код, когда получу элемент i,

спасибо

Ответы [ 3 ]

2 голосов
/ 16 февраля 2011

Вы можете использовать функцию zip , чтобы получить текущий и следующий элемент в списке в цикле for. Таким образом, цикл for выполняет итерацию по списку и смещению списка на 1 одновременно:

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

Тем не менее, zip останавливается в конце кратчайшего списка, поэтому вы не сможете обработать последний элемент списка. Если это проблема, используйте izip_longest из 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

Вы можете использовать {% for x, y in somelist %} в шаблоне Django, но вам нужно будет сделать zip в вашей модели и сохранить его в переменной, переданной в шаблон.

1 голос
/ 16 февраля 2011

Проще перечислить список для этого:

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 голосов
/ 16 февраля 2011
>>> 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
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...