Как сгруппировать элементы в python с помощью n элементов? Возможный дубликат: Как вы разбиваете список на четные фрагменты в Python? Я хотел бы получить группы элементов размера n из списка l: т.е.: [1,2,3,4,5,6,7,8,9] -> [[1,2,3], [4,5,6],[7,8,9]] where n is 3 Ответ 1 Вы можете использовать grouper из recipes на странице документации itertools: def grouper(n, iterable, fillvalue=None): "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args) Ответ 2 Ну, ответ грубой силы: subList = [theList[n:n+N] for n in range(0, len(theList), N)] где N - размер группы (3 в вашем случае): >>> theList = list(range(10)) >>> N = 3 >>> subList = [theList[n:n+N] for n in range(0, len(theList), N)] >>> subList [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]] Если вы хотите заполнить значение, вы можете сделать это прямо перед пониманием списка: tempList = theList + [fill] * N subList = [tempList[n:n+N] for n in range(0, len(theList), N)] Пример: >>> fill = 99 >>> tempList = theList + [fill] * N >>> subList = [tempList[n:n+N] for n in range(0, len(theList), N)] >>> subList [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 99, 99]] Ответ 3 См. примеры внизу документации itertools: http://docs.python.org/library/itertools.html?highlight=itertools#module-itertools Вам нужен метод "grouper" или что-то в этом роде. Ответ 4 Как насчет a = range(1,10) n = 3 out = [a[k:k+n] for k in range(0, len(a), n)] Ответ 5 answer = [L[3*i:(3*i)+3] for i in range((len(L)/3) +1)] if not answer[-1]: answer = answer[:-1]
Ответ 1 Вы можете использовать grouper из recipes на странице документации itertools: def grouper(n, iterable, fillvalue=None): "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args)
Ответ 2 Ну, ответ грубой силы: subList = [theList[n:n+N] for n in range(0, len(theList), N)] где N - размер группы (3 в вашем случае): >>> theList = list(range(10)) >>> N = 3 >>> subList = [theList[n:n+N] for n in range(0, len(theList), N)] >>> subList [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]] Если вы хотите заполнить значение, вы можете сделать это прямо перед пониманием списка: tempList = theList + [fill] * N subList = [tempList[n:n+N] for n in range(0, len(theList), N)] Пример: >>> fill = 99 >>> tempList = theList + [fill] * N >>> subList = [tempList[n:n+N] for n in range(0, len(theList), N)] >>> subList [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 99, 99]]
Ответ 3 См. примеры внизу документации itertools: http://docs.python.org/library/itertools.html?highlight=itertools#module-itertools Вам нужен метод "grouper" или что-то в этом роде.
Ответ 5 answer = [L[3*i:(3*i)+3] for i in range((len(L)/3) +1)] if not answer[-1]: answer = answer[:-1]