a = enumerate('abcdef')
b = enumerate('ghi')
for i, j in zip(a, b):
print(i, j)
if i[0] == 0:
next(itertools.islice(zip(a, b), 1, 1), None)
Для приведенного выше кода я ожидаю следующего результата при увеличении zip (a, b) на 1:
((0, 'a'), (0, 'g'))
((2, 'c'), (2, 'i'))
Однако он по-прежнему дает тот же результат, что и следующий код:
iter1 = enumerate('abcdef')
iter2 = enumerate('ghi')
for i, j in zip(a, b):
print(i, j)
выход:
((0, 'a'), (0, 'g'))
((1, 'b'), (1, 'h'))
((2, 'c'), (2, 'i'))
почему оператор next (itertools.islice (zip (a, b), 1, 1), None) не продвигает zip (a, b)?
... у меня отлично работает (python 3.6). Вы правильно назвали свои генераторы (ìter1
vs a
)?
извините, произошла ошибка, это должно быть iter1 вместо a и iter2 вместо b.
Я запускаю приведенный выше код в python 3.6, и он дает ожидаемый результат. Всем спасибо за уделенное время!
3,6 молния возвращает итераторы, и он работает так, как вы ожидаете:
a = enumerate('abcdef')
b = enumerate('ghi')
for i, j in zip(a, b):
print(i, j)
if i[0] == 0:
next(itertools.islice(zip(a, b), 1, 1), None)
он будет пропускать кортежи (1,)
, поскольку zip возвращает итераторы.
2.7 молния возвращает список кортежей, и оба оператора не связаны между собой, поскольку zip(a,b)
являются отдельным списком, оба используют несвязанные последовательности перечисления.
Таким образом, для 2.7 они не пропускают кортежи (1,)
.
Результат 3.6:
(0, 'a') (0, 'g')
(2, 'c') (2, 'i')
Результат 2.7:
((0, 'a'), (0, 'g'))
((1, 'b'), (1, 'h'))
((2, 'c'), (2, 'i'))
Вы запускаете 2.7 из демонстрационного вывода.
https://docs.python.org/3.6/library/functions.html#ziphttps://docs.python.org/2.7/library/functions.html#zip
Я только что узнал, что функция zip по-разному работает в python 2.7 и 3.6. Спасибо за вашу помощь!
где
a
, гдеb
? при чем тутiter1
+iter2
?