我正在尝试使用迭代器在 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 在迭代器上。
