迭代跳过函数

2024-05-19 12:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

目前正在使用python3.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

有人有什么想法吗?你知道吗


Tags: 函数代码output参数defcountcurrentiterable
1条回答
网友
1楼 · 发布于 2024-05-19 12:36:17

^{}已经提供了:

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

相关问题 更多 >