почему функция zip не дала ожидаемого результата в python - PullRequest
0 голосов
/ 01 мая 2018
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)?

1 Ответ

0 голосов
/ 01 мая 2018

3.6 zip возвращает итераторы, и все работает как вы ожидаете:

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 возвращает список кортежей, и оба оператора не связаны, так как 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#zip https://docs.python.org/2.7/library/functions.html#zip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...