如果输入是
round_robin(range(5), "hello")
我需要输出为
[0, 'h', 1, 'e', 2, 'l', 3, 'l', 4, 'o']
我试过了
def round_robin(*seqs):
list1=[]
length=len(seqs)
list1= cycle(iter(items).__name__ for items in seqs)
while length:
try:
for x in list1:
yield x
except StopIteration:
length -= 1
pass
但它的错误在于
AttributeError: 'listiterator' object has no attribute '__name__'
如何修改代码以获得所需的输出?
您可以使用^{} 函数,然后使用列表理解将结果展平,如下所示
输出
zip
函数对两个iterable中的值进行分组,如下所示我们把每一个元组都取出来,用列表理解的方法把它展平。
但是正如@Ashwini Chaudhary建议的那样,使用roundrobin receipe from the docs
你可以在这里找到一系列迭代食谱:http://docs.python.org/2.7/library/itertools.html#recipes
编辑:Python 3
https://docs.python.org/3/library/itertools.html#itertools-recipes
您可以利用itertools.chain(展开元组)和itertools.izip(为了创建交错模式而转置元素)来创建结果
如果字符串的长度不等,请使用带pad值的izip_longest(最好是空字符串)
相关问题 更多 >
编程相关推荐