Python izip_最长,使用循环代替填充值

Python izip_最长,使用循环代替填充值,python,Python,不确定如何查找,但从itertools函数执行以下操作: izip_最长('ABCD','xy',fillvalue='-')-->Ax By C-D- 我希望iterable图书馆能做到这一点: izip\u longest\u better('ABCDE','xy')-->Ax By Cx Dy Ex 最好用于任意数量的iterables,用于生成数百万个组合。我会写我自己的,但我想我会问,因为我肯定我自己的不会很像蟒蛇 太棒了,这是我从未尝试过的循环。我还能够通过在数组上嵌套循环而不是迭代

不确定如何查找,但从
itertools
函数执行以下操作:

izip_最长('ABCD','xy',fillvalue='-')
-->
Ax By C-D-

我希望iterable图书馆能做到这一点:

izip\u longest\u better('ABCDE','xy')
-->
Ax By Cx Dy Ex

最好用于任意数量的iterables,用于生成数百万个组合。我会写我自己的,但我想我会问,因为我肯定我自己的不会很像蟒蛇


太棒了,这是我从未尝试过的循环。我还能够通过在数组上嵌套循环而不是迭代器来实现一些功能,但这要好得多。我最后用它来处理类似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 def izip_最长_重复(*参数): 如果参数为: 列表=已排序(args,key=len,reverse=True) 结果=列表(itertools.izip(*[lists[0]]+[itertools.cycle(l)表示列表中的l[1:]])) 其他: 结果=[()] 返回结果 像这样的

>>> import itertools
>>> 
>>> a = 'ABCDE'
>>> b = 'xy'
>>> 
>>> list(itertools.izip_longest(a, b, fillvalue='-'))
[('A', 'x'), ('B', 'y'), ('C', '-'), ('D', '-'), ('E', '-')]
>>> list(itertools.izip(a, itertools.cycle(b)))
[('A', 'x'), ('B', 'y'), ('C', 'x'), ('D', 'y'), ('E', 'x')]
还有任意数量的iterables变体(假设您不希望第一个参数循环,并且您对itertools.product不感兴趣):


对于要使用的Python 3 由于
izip_longest
已被弃用

import itertools
list = list(itertools.zip_longest('ABCD', 'xy', fillvalue='-'))
print(list) // --> Ax By C- D-

太棒了,这是一个我没有尝试过的循环。我也能够通过在数组上嵌套循环而不是迭代器来获得一些效果,但这要好得多。我最终使用的是这个来处理类似于izip的问题。
lists=sorted(args,key=len,reverse=True)
result=list(itertools.izip(*[lists[0]]+[itertools.cycle(l)for l in list[1:]])
从头在某些元素中的列表生成字典时非常重要!
import itertools
list = list(itertools.zip_longest('ABCD', 'xy', fillvalue='-'))
print(list) // --> Ax By C- D-