如何修复yield_and_skip函数

时间:2017-02-07 06:43:29

标签: python

def yield_and_skip(iterable):
    x = iter(iterable)
    y = next(x)
    while x:
        if type(y) == int:
            yield y
            for i in range(y):
                y = next(x)
        elif type(y) == str:
            yield y 
            y = next(x)

我正在编写一个以iterable作为参数的生成器:它生成iterable中的每个值,除非它产生一个int n,它不会产生(跳过)下一个n值。

例如,

for i in yield_and_skip([1,2,1,3,'a','b',2,5,'c',1,2,3,8,'x','y','z',2]):
    print(i,end=' ')

prints 1 1 a b 2 1 3 z 2.

但不是

1, 1, 'a', 'b', 2, 1, 3, 'z', 2

我的功能打印

1, 2, 3, 2, 'c', 1, 2, 8

有人可以帮我解决吗?提前致谢。

2 个答案:

答案 0 :(得分:0)

有两种方法可以解决它,首先是将for循环中的迭代次数增加一: for i in range(y+1):

第二个是在for循环之后将y重新分配给x的下一次迭代:

for i in range(y):
   y = next(x)
y = next(x)

答案 1 :(得分:0)

只需更改

中范围的限制即可
 for i in range(y):

 for i in range(y + 1):