импорт izip из модуля itertools дает NameError в Python 3.x

Я пытаюсь импортировать модуль izip следующим образом:

from itertools import izip

Однако после недавнего перехода с Python 2.7 на 3 он, похоже, не работает.

Я пытаюсь записать в файл csv:

writer.writerows(izip(variable1,2))

Но мне не повезло. Все еще сталкиваюсь с ошибкой.


person iAmNewToPYTHON    schedule 18.09.2015    source источник


Ответы (3)


В Python 3 встроенный zip выполняет ту же работу, что и itertools.izip в 2.X (возвращает итератор вместо списка). zip реализация почти полностью скопирована из старого izip, всего с несколькими изменены имена и добавлена ​​поддержка рассола.

Вот эталон между zip в Python 2 и 3 и izip в Python 2:

Python 2.7:

from timeit import timeit

print(timeit('list(izip(xrange(100), xrange(100)))',
             'from itertools import izip',
             number=500000))

print(timeit('zip(xrange(100), xrange(100))', number=500000))

Выход:

1.9288790226
1.2828938961

Python 3:

from timeit import timeit

print(timeit('list(zip(range(100), range(100)))', number=500000))

Выход:

1.7653984297066927

В этом случае, поскольку аргументы zip должны поддерживать итерацию, вы не можете использовать 2 в качестве аргумента. Итак, если вы хотите записать 2 переменные в виде строки CSV, вы можете поместить их в кортеж или список:

writer.writerows((variable1,2))

Также из itertools вы можете импортировать zip_longest как более гибкую функцию, которую вы можете использовать на итераторах разного размера.

person kasravnd    schedule 18.09.2015
comment
аааа, видимо, я не так хорошо понимаю льготные периоды редактирования, как мне казалось. теперь журналы редактирования сбивают с толку - person user2357112 supports Monica; 08.05.2018

Один из способов, который мне помог:

try:
    from itertools import izip as zip
except ImportError: # will be 3.x series
    pass
person Vasyl Lyashkevych    schedule 15.02.2018

Используйте zip вместо izip непосредственно в python 3, не нужно ничего импортировать.

Для получения дополнительной информации посетите здесь.

person SilentFlame    schedule 23.05.2018
comment
Для дальнейшего что? :) - person bers; 20.12.2019
comment
Для дальнейшего понимания и просмотра патча, где это было исправлено. Может быть, хороший способ пойти. @берс - person SilentFlame; 20.12.2019