Форум сайта python.su
1
Уважаемы форумчане, такой вопрос у меня к вам.
Как мне разложить список на три элемента?
spisok =
мне необходимы каждые три элемента из этого списка за одну итерацию.
Офлайн
23
def separ(mlist, step, start=0): for s in range(start, len(mlist), step): print mlist[s:s+step] L = range(11) start = 0 step = 3 separ(L, step, start)
Отредактировано vrabey (Май 11, 2014 23:30:03)
Офлайн
568
l = ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'] print zip(*[iter(l)] * 3)
Офлайн
857
продолжил пример FishHook'а
>>> import itertools >>> >>> lst = list('abcdefghij') >>> list(itertools.zip_longest(*[iter(lst)] * 3)) [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', 'i'), ('j', None, None)] >>>
Офлайн
23
глядя на примеры py.user.next и FishHook разложил так для себя
s = iter("1234567") print map(None, s, s, s)
*[iter(lst)] * 3
Офлайн
568
vrabeyТо же, что и в вызове любой функции делает звёздочка перед аргументом.
что делает < * > перед итератором
Офлайн
568
k = [None] + [s]*3 print map(*k)
Офлайн
23
zip(*[iter(l)] * 3)
a = list('123') b = list("abc") print zip(a, b)
zip(*[iter(a)] * 3)
zip(*[a] * 3)
Отредактировано vrabey (Май 12, 2014 09:32:57)
Офлайн
568
1. Что будет в результате?
[0] * 3
[iter(a)] * 3
a = [1,2,3] b = [2,3,4] c = [3,6,7] rez = zip(a, b, c)
a = [1,2,3] b = [2,3,4] c = [3,6,7] lst = [a, b , c] rez =zip(*lst)
i = iter(l) a = i b = i c = i rez = zip(a, b, c)
Офлайн
23
FishHookспасибо
…А так как итератор один и тот же, то итерация a.next() изменяет курсор у a, b и c.
Офлайн