Не уверен, как это найти, но из 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