Подтвердить что ты не робот

Как записать список в 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)
4b9b3361

Ответ 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)]