Как записать список в Python 3?
Я нашел следующий код, совместимый с python2
from itertools import izip_longest
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
Однако это не работает с Python 3. Я получаю следующую ошибку:
ImportError: cannot import name izip_longest
Может кто-нибудь помочь?
Я хотел бы преобразовать список [1,2,3,4,5,6,7,8,9]
в [[1,2,3],[4,5,6],[7,8,9]]
Изменить
Теперь совместим с Python3
Приведенный ниже код адаптирован из выбранного ответа. Просто измените имя от izip_longest
до zip_longest
.
from itertools import zip_longest
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return zip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
Ответы
Ответ 1
В Python 3 itertools
есть функция, называемая zip_longest
. Он должен делать то же самое, что и izip_longest
из Python 2.
Почему изменение имени? Вы также можете заметить, что теперь itertools.izip
ушел в Python 3 - потому что в Python 3 встроенная функция zip
теперь возвращает итератор, тогда как в Python 2 он возвращает список. Поскольку нет необходимости в функции izip
, также имеет смысл переименовать вариант _longest
для согласованности.
Ответ 2
Согласно документ:
>>> s = [1,2,3,4,5,6,7,8,9]
>>> n = 3
>>> list(zip(*[iter(s)]*n))
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]