Форум сайта python.su
0
Добрый день.
Есть список неизвестной длины, нужно выводить его порциями заданой величины и остаток от списка Подскажите как правильно реализовать данную задачу.
Вот вариантов которые пришел в голову, не уверен что это оптимальное решение
def test(a, k): for i in xrange(len(a)/k): print a[i*k:(i+1)*k] if len(a) % k != 0 : print a[-(len(a) % k):] l = [1, 2, 3, 4, 5, 6] test(l,5) [1, 2, 3, 4, 5] [6]
Офлайн
1
Вот держи
def group(iterable, count):
a = []
for i in xrange(0, len(iterable), count):
a.append(iterable[i: i+count])
return a
print group(range(10), 4)
def group(iterable, count):
return [iterable[i: i+count] for i in xrange(0, len(iterable), count)]
print group(range(10), 4)
Отредактировано Massa1994 (Фев. 2, 2015 13:53:37)
Офлайн
0
Спасибо
Офлайн
857
myarik
Есть список неизвестной длины
>>> def f(seq, n): ... assert n > 0 ... lst, x = [], 0 ... for i in seq: ... lst.append(i) ... x += 1 ... if x == n: ... yield lst ... lst, x = [], 0 ... if lst: ... yield lst ... >>> list(f([1, 2, 3, 4, 5], 2)) [[1, 2], [3, 4], [5]] >>>
Офлайн
36
В официальной документации предлагается следующий вариант:
def group(iterable, count): return zip(*[iter(iterable)] * count)
Офлайн
0
pyuserРассматривал такой вариант но он не подходил так как изначально не известно количество элементов в массиве.
В официальной документации предлагается следующий вариант:
>>> a = [1,2,3,4,5,6] >>> zip(*[iter(a)] * 5) [(1, 2, 3, 4, 5)]
>>> for i in izip_longest(*[iter(a)] * 5): print i ... (1, 2, 3, 4, 5) (6, None, None, None, None) >>>
Офлайн