Skip to main content
 首页 » 编程设计

Python 跳过迭代器

2025年05月04日14mfryf

我正在尝试使用迭代器在 Python 中构建一个“船长”。

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

' '.join([str(i) for i in skippy([1,'a','b','b',2,1,1,1,'c','d','b']) 

我们得到

1 b b 2 1 d b 

作为输出。规则是每次我们遇到整数 x 时,我们都会跳过可迭代对象中的后面 x 个项目。

到目前为止我有:

def skippy(it): 
    p = 0     
    for x in it: 
        if type(x) == int: 
           for x in range(x): 
              p = next(it) 
           yield p 

这并没有像预期的那样工作,关于如何解决它有什么想法吗?

请您参考如下方法:

不确定您尝试使用单独的 p 和 x 来实现什么。你可以这样做:

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' 

如果你想直接传入一个列表,你需要在参数上调用iter,因为列表是可迭代的,而不是迭代器,你只能调用 next 在迭代器上。