Как создать список в Python 3? - PullRequest
30 голосов
/ 01 мая 2011

Я нашел следующий код, совместимый с 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)

Ответы [ 3 ]

51 голосов
/ 01 мая 2011

В Python 3 itertools есть функция с именем zip_longest. Он должен сделать то же самое, что и izip_longest из Python 2.

Почему смена имени? Вы также можете заметить, что itertools.izip теперь отсутствует в Python 3 - потому что в Python 3 встроенная функция zip теперь возвращает итератор, тогда как в Python 2 он возвращает список. Поскольку функция izip не требуется, также имеет смысл переименовать вариант _longest для согласованности.

2 голосов
/ 12 июня 2017

Согласно Документ :

>>> 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)]
0 голосов
/ 23 октября 2018

После всего вышесказанного, вот решение python3, которое, я считаю, дает более безопасные и более предсказуемые результаты.

def chunker(iter, size):
    chunks = [];
    if size < 1:
        raise ValueError('Chunk size must be greater than 0.')
    for i in range(0, len(iter), size):
        chunks.append(iter[i:(i+size)])
    return chunks

example = [1,2,3,4,5,6,7,8,9]
print(' 1: ' + str(chunker(example, 1)))
print(' 3: ' + str(chunker(example, 3)))
print(' 4: ' + str(chunker(example, 4)))
print(' 8: ' + str(chunker(example, 8)))
print(' 9: ' + str(chunker(example, 9)))
print('10: ' + str(chunker(example, 10)))

Результаты:

$ python3 iter_chunk.py 
 1: [[1], [2], [3], [4], [5], [6], [7], [8], [9]]
 3: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 4: [[1, 2, 3, 4], [5, 6, 7, 8], [9]]
 8: [[1, 2, 3, 4, 5, 6, 7, 8], [9]]
 9: [[1, 2, 3, 4, 5, 6, 7, 8, 9]]
10: [[1, 2, 3, 4, 5, 6, 7, 8, 9]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...