python 迭代器 skip_func
python iterator skip_func
def yield_and_skip(iterable,skip):
for i in iterable:
print(skip(i))
for x in range(skip(i)):
pass
yield i
我正在定义一个名为 skip_yield 的函数,它从可迭代对象中生成一个值,然后在对刚刚生成的值调用函数参数时跳过指定的值数。它需要 2 个参数:skip 是一个小函数。
但是,如果我尝试这样做:
print(''.join([v for v in yield_and_skip('abbabxcabbcaccabb',lambda x : {'a':1,'b':2,'c':3}.get(x,0))]))
它给了我:
abbabcabbcaccabb
但它应该给我:
abxccab
有什么想法吗?
您可以为要跳过的元素数量定义一个计数器并相应地更新它
def yield_and_skip(iterable,skip):
num_to_skip = 0
for i in iterable:
if num_to_skip == 0:
num_to_skip = skip(i)
yield i
else:
num_to_skip -= 1
你的样本行的输出是
>>> print(''.join([v for v in yield_and_skip('abbabxcabbcaccabb',lambda x : {'a':1,'b':2,'c':3}.get(x,0))]))
abxccab
首先,pass
不会对 iterable
做任何事情。如果需要推进迭代器,请在迭代器对象上调用 next
函数 skip(i)
次(直接或间接)。
此外,next
调用可能引发 StopIteration
,从而终止循环。 yield i
在推进迭代器之前 或 提供第二个参数,使 next
吞下异常。
你的代码看起来像
def yield_and_skip(iterable, skip):
it = iter(iterable)
for i in it:
for _ in range(skip(i)):
next(it, None)
yield i
def yield_and_skip(iterable,skip):
for i in iterable:
print(skip(i))
for x in range(skip(i)):
pass
yield i
我正在定义一个名为 skip_yield 的函数,它从可迭代对象中生成一个值,然后在对刚刚生成的值调用函数参数时跳过指定的值数。它需要 2 个参数:skip 是一个小函数。 但是,如果我尝试这样做:
print(''.join([v for v in yield_and_skip('abbabxcabbcaccabb',lambda x : {'a':1,'b':2,'c':3}.get(x,0))]))
它给了我:
abbabcabbcaccabb
但它应该给我:
abxccab
有什么想法吗?
您可以为要跳过的元素数量定义一个计数器并相应地更新它
def yield_and_skip(iterable,skip):
num_to_skip = 0
for i in iterable:
if num_to_skip == 0:
num_to_skip = skip(i)
yield i
else:
num_to_skip -= 1
你的样本行的输出是
>>> print(''.join([v for v in yield_and_skip('abbabxcabbcaccabb',lambda x : {'a':1,'b':2,'c':3}.get(x,0))]))
abxccab
首先,pass
不会对 iterable
做任何事情。如果需要推进迭代器,请在迭代器对象上调用 next
函数 skip(i)
次(直接或间接)。
此外,next
调用可能引发 StopIteration
,从而终止循环。 yield i
在推进迭代器之前 或 提供第二个参数,使 next
吞下异常。
你的代码看起来像
def yield_and_skip(iterable, skip):
it = iter(iterable)
for i in it:
for _ in range(skip(i)):
next(it, None)
yield i