Найти - Пользователи
Полная версия: Вывести список частями
Начало » Python для новичков » Вывести список частями
1
myarik
Добрый день.

Есть список неизвестной длины, нужно выводить его порциями заданой величины и остаток от списка Подскажите как правильно реализовать данную задачу.

Вот вариантов которые пришел в голову, не уверен что это оптимальное решение

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]

Massa1994
Вот держи
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)
myarik
Спасибо
py.user.next
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]]
>>>
pyuser
В официальной документации предлагается следующий вариант:
def group(iterable, count):
    return zip(*[iter(iterable)] * count)
Если количество элементов iterable не кратно count, то можно вместо zip использовать zip_longest
myarik
pyuser
В официальной документации предлагается следующий вариант:
Рассматривал такой вариант но он не подходил так как изначально не известно количество элементов в массиве.

>>> a = [1,2,3,4,5,6]
>>> zip(*[iter(a)] * 5)
[(1, 2, 3, 4, 5)]

Относительно zip_longest не знал, в версии 2.7.6 есть только библиотека izip_longest
Но она заменяет недостающие элементы на None

>>> for i in izip_longest(*[iter(a)] * 5): print i
...
(1, 2, 3, 4, 5)
(6, None, None, None, None)
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB