Форум сайта python.su
>>> import itertools >>> >>> lsts = [ ... [1], ... [2, 3], ... [4, 5, 6] ... ] >>> >>> out = list( ... itertools.chain.from_iterable( ... map(itertools.chain, ... itertools.islice( ... zip(*map(itertools.cycle, lsts)), ... len(lsts[-1])))) ... ) >>> out [1, 2, 4, 1, 3, 5, 1, 2, 6] >>>
>>> import itertools >>> >>> lsts = [ ... [1], ... [2, 3], ... [4, 5, 6] ... ] >>> >>> out = list( ... itertools.chain.from_iterable( ... itertools.islice( ... zip(*map(itertools.cycle, lsts)), ... len(lsts[-1]))) ... ) >>> out [1, 2, 4, 1, 3, 5, 1, 2, 6] >>>
Отредактировано py.user.next (Июль 31, 2013 03:43:44)
Офлайн
sp = [ [1,2,3], [4,5,6], [7,[8,9]], [10,11], 12,13 ] def stronglist(lst): res = [] for i in lst: if type(i) == list: res.extend(stronglist(i)) else: res.append(i) return res print(stronglist(sp)) out: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
Офлайн
Всем спасибо. Вопрос решен. В финал вышли:
Вариант от PooH, которой я в итоге использовал(убрал лишнюю проверку):
#python2 from itertools import cycle lsts = [ [1], [2, 3], [4, 5, 6] ] def foxy_iter(ls): maxlen = max(len(x) for x in ls) ls = [cycle(x) for x in ls] for i in range(maxlen): for x in ls: yield next(x) # print list(foxy_iter(lsts))
#python2 from itertools import izip, chain, cycle, islice lsts = [ [1], [2, 3], [4, 5, 6] ] out = chain(*islice(izip(*map(cycle, lsts)), max(map(len, lsts)))) # print list(out)
Офлайн