Вы можете использовать for in range с размером шага 2:
Python 2
for i in xrange(0,10,2):
print(i)
Python 3
for i in range(0,10,2):
print(i)
Примечание: Используйте xrange в Python 2 вместо диапазона, потому что он более эффективен, поскольку генерирует повторяющийся объект, а не весь список.
Вы также можете использовать этот синтаксис ( L [start: stop: step]
) :
mylist = [1,2,3,4,5,6,7,8,9,10]
for i in mylist[::2]:
print i,
# prints 1 3 5 7 9
for i in mylist[1::2]:
print i,
# prints 2 4 6 8 10
Где первая цифра - это начальный индекс (по умолчанию - начало списка или 0), вторая - конечный индекс среза (по умолчанию - конец списка), а третья цифра - смещение или шаг.
Самым простым, на мой взгляд, является следующее:
it = iter([1,2,3,4,5,6])
for x, y in zip(it, it):
print x, y
Никакого дополнительного импорта или чего-то подобного. И, на мой взгляд, очень элегантно.
Если вы используете Python 2.6 или новее, вы можете использовать рецепт группировщика из модуля itertools
:
from itertools import izip_longest
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
Вызовите так:
for item1, item2 in grouper(2, l):
# Do something with item1 and item2
Обратите внимание, что в Python 3 .x следует использовать zip_longest
вместо izip_longest
.
nums = range(10)
for i in range(0, len(nums)-1, 2):
print nums[i]
Грязновато, но работает.
Если у вас есть контроль над структурой списка, наиболее питоничным было бы изменить его с:
l=[1,2,3,4]
на:
l=[(1,2),(3,4)]
Тогда ваш цикл будет:
for i,j in l:
print i, j
Это может быть не так быстро, как решение izip_longest (на самом деле я его не тестировал), но он будет работать с python <2.6 (izip_longest был добавлен в 2.6):
from itertools import imap
def grouper(n, iterable):
"grouper(3, 'ABCDEFG') --> ('A,'B','C'), ('D','E','F'), ('G',None,None)"
args = [iter(iterable)] * n
return imap(None, *args)
Если вам нужно использовать более раннюю версию, чем 2.3, вы можете заменить imap на встроенную карту. Недостатком является то, что он не дает возможности настраивать значение заливки.