izip_longest с циклом вместо fillvalue

Не уверен, как это найти, но из itertoolsфункция izip_longestделает следующее:

izip_longest('ABCD', 'xy', fillvalue='-')--> Ax By C- D -

Я надеялся, что итерируемая библиотека будет что-то делать для этого:

izip_longest_better('ABCDE', 'xy')--> Ax By Cx Dy Ex

Предпочтительно для произвольное количество итераций, используемых для генерации миллионов комбинаций. Я напишу свой собственный, но я подумал, что как k, так как я уверен, что мой собственный не будет очень питоническим.

Удивительно! Это был цикл, который я еще не пробовал. Я также смог заставить что-то работать, вложив циклы for в массивы вместо итераторов, но это намного лучше. В конце концов я использовал это для обработки, похожей на izip"

РЕДАКТИРОВАТЬ: В итоге получил

def izip_longest_repeat(*args):
    if args:
        lists = sorted(args, key=len, reverse=True)
        result = list(itertools.izip(*([lists[0]] + [itertools.cycle(l) for l in lists[1:]])))
    else:
        result = [()]
    return result

7
задан adzuci 5 March 2012 в 20:18
поделиться