目前正在使用Python 3.3。我目前在查找如何编写一个函数时会遇到一些问题,该函数需要一个iterable
和一个int
作为参数,并从iterable
生成值,从第一个开始,跳过int
指定的值的数量。
我的代码如下:
def skipping(iterable,n=0):
_iters = iter(iterable)
try:
while True:
current = next(_iters)
count = n
while count != 0:
count -= 1
current = next(_iters)
count = n
yield current
except StopIteration:
pass
当我致电skipping('abcdefghijklmnopqrstuvwxyz', 1)
时。我得到了.join()
:
bdfhjlnprtvxz <---- Wrong output
我想得到:
acegikmoqsuwy <---- Right output
有人有什么想法吗?
答案 0 :(得分:0)
itertools
已经提供了这个:
def skipping(iterable, n=0):
return itertools.islice(iterable, 0, None, n+1)
该文档还为islice
提供了近似等效的Python代码:
def islice(iterable, *args):
# islice('ABCDEFG', 2) --> A B
# islice('ABCDEFG', 2, 4) --> C D
# islice('ABCDEFG', 2, None) --> C D E F G
# islice('ABCDEFG', 0, None, 2) --> A C E G
s = slice(*args)
it = iter(xrange(s.start or 0, s.stop or sys.maxint, s.step or 1))
nexti = next(it)
for i, element in enumerate(iterable):
if i == nexti:
yield element
nexti = next(it)
你的代码中的错误是你跳过,收益,跳过,收益而不是收益,跳过,收益,跳过。在开始跳过元素之前,您需要首先生成一个元素:
def skipping(iterable,n=0):
iterable = iter(iterable)
try:
while True:
yield next(iterable)
for _ in xrange(n):
next(iterable)
except StopIteration:
pass