for i in myzip('abcde','fg','hijk'):
print(i,end='')
我需要写myzip生成器接受任意数量的iterables(调用数字n)它产生每个iterable中第一个值的n元组,每个iterable的第二个值等等;如果一个iterable在所有其他迭代之前耗尽,它在n元组中的位置应该存储None。
例如:
('a','f','h')('b','g','i')('c',None,'j')('d',None,'k')('e',None, None)
打印5个3元组toString()
。
由于某些原因,我的程序失败了,它没有产生任何结果。
答案 0 :(得分:0)
您的方法存在几个逻辑问题。我创建了一个功能,通过一些改进来完成您正在寻找的功能。特别是,在yield
循环的每次迭代期间调用while
而不是将元组存储在列表中并在结尾处顺序yield
。这是我列出的事情清单:
while
循环没有终止(没有中断)for ... in ...
函数来读取每个可迭代的下一个项目,而不是使用next()
语法来读取每个可迭代的内容。while
循环现在被打破以下是修改后的功能:
def myzip(*iterables):
x = [iter(a) for a in iterables]
sentinel = object()
while True:
l = []
valid = False
for y in x:
item = next(y, sentinel)
if item is sentinel:
item = None
else:
valid = True
l.append(item)
if not valid:
break
yield tuple(l)
并在行动中链接到它: