Python跳过迭代器

uni*_*ion 1 python iterator

我正在尝试使用迭代器在Python中构建一个"船长".

这个想法是给定以下内容:

' '.join([str(i) for i in skippy([1,'a','b','b',2,1,1,1,'c','d','b'])
Run Code Online (Sandbox Code Playgroud)

我们得到了

1 b b 2 1 d b
Run Code Online (Sandbox Code Playgroud)

作为输出.规则是每当我们达到整数x时,我们跳过iterable中的以下 x项.

到目前为止,我有:

def skippy(it):
    p = 0    
    for x in it:
        if type(x) == int:
           for x in range(x):
              p = next(it)
           yield p
Run Code Online (Sandbox Code Playgroud)

这不能按预期工作,任何关于如何解决它的想法?

Bre*_*arn 5

不确定你要使用单独的px.你可以这样做:

def skippy(it):
    it = iter(it)
    for x in it:
        if type(x) is int:
            yield x
            for skip in range(x):
                next(it)
        else:
            yield x

>>> ' '.join([str(i) for i in skippy(iter([1,'a','b','b',2,1,1,1,'c','d','b']))])
'1 b b 2 1 d b'
Run Code Online (Sandbox Code Playgroud)

iter如果您希望能够直接传递列表,则需要调用参数,因为列表是可迭代的,而不是迭代器,并且您只能调用next迭代器.