Почему функция zip не дала ожидаемого результата на Python

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

где a, где b? при чем тут iter1 + iter2?

Patrick Artner 01.05.2018 12:32

... у меня отлично работает (python 3.6). Вы правильно назвали свои генераторы (ìter1 vs a)?

hiro protagonist 01.05.2018 12:33

извините, произошла ошибка, это должно быть iter1 вместо a и iter2 вместо b.

jing 01.05.2018 12:36

Я запускаю приведенный выше код в python 3.6, и он дает ожидаемый результат. Всем спасибо за уделенное время!

jing 01.05.2018 12:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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. Спасибо за вашу помощь!

jing 01.05.2018 12:46

Другие вопросы по теме