Я новичок в python. Есть ли аналогичный способ написать этот цикл C для двух переменных в python?Python: C для цикла с двумя переменными
for (i = 0, j = 20; i != j; i++, j--) { ... }
Я новичок в python. Есть ли аналогичный способ написать этот цикл C для двух переменных в python?Python: C для цикла с двумя переменными
for (i = 0, j = 20; i != j; i++, j--) { ... }
В зависимости от ситуации вы можете использовать ZIP:
lista = [1,2,3]
listb = [4,5,6]
for x,y in zip(lista, listb)
print(x, y)
выходы:
1 4
2 5
3 6
молнии документы здесь: http://docs.python.org/3.3/library/functions.html#zip
Кроме того, чтобы пойти с тем, что вы говорили два номера, вы можете сделать
for x,y in zip(range(0), range(10, 0, -1))
if x == y:
break
# do stuff
Это даст вам как увеличение, так и уменьшение значений.
>>> i, j = 0, 10
>>> while i != j:
... # Your code here:
... print "i: %d j: %d" % (i, j)
... i += 1
... j -= 1
...
...
i: 0 j: 10
i: 1 j: 9
i: 2 j: 8
i: 3 j: 7
i: 4 j: 6
Если вам интересно, почему это часто можно увидеть >>>
и ...
в примерах кода это потому, что люди используют интерпретатор Python (Снаряд, если вы хотите), или обертка интерпретатора как bpython. Я действительно рекомендую получить bpython для тестирования кода, подобного этому.
Python 2.x
from itertools import izip, count
for i, j in izip(count(0, 1), count(20, -1)):
if i == j: break
# do stuff
Python 3.x:
from itertools import count
for i, j in zip(count(0, 1), count(20, -1)):
if i == j: break
# do stuff
Это использует itertools.count()
, итератор, с некоторой начальной точки до бесконечности:
itertools.count(start=0, step=1)
Сделайте итератор, который возвращает равномерно разнесенные значения, начиная с
n
. Часто используется в качестве аргумента дляimap()
для генерации последовательных точек данных. Также используется сizip()
для добавления порядковых номеров.
В Python 2.x вы должны использовать izip
потому Py2K zip
пытается создать список всех результатов, в отличие от izip
которая возвращает iterator
над результатами, как они получены. К сожалению, здесь мы имеем дело с бесконечными итераторами, так что zip
не будет работать ... это, вероятно, хороший момент, почему zip
был изменен для выполнения функции izip
в Py3K (izip
больше не существует).
Если вы без ума быть функциональной вы даже можете сделать это (но это выглядит некрасиво, на мой взгляд, так как я вырос ненавидеть lambda
с):
from itertools import takewhile, izip, count
for i, j in takewhile(lambda x: x[0] != x[1], izip(count(0, 1), count(20, -1))):
# do stuff
Вы можете использовать почтовый индекс, но для проблема в том, что переключение на вторую переменную не является действительно необходимым, и поэтому требуется гораздо более простой подход:
for i in range(10):
j = 20 - i
⋮
Короткий ответ: не совсем.'for' в python - для итерации по итерируемым вещам, и в то время как' while' делает материал с переменными, которые вы хотели бы использовать C-like 'for' (обратите внимание, как' for' в C является только сокращенным 'while', таким образом, совершенно избыточный). – TNW