Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代跳跃函数_Python_String_Int_Iterable - Fatal编程技术网

Python 迭代跳跃函数

Python 迭代跳跃函数,python,string,int,iterable,Python,String,Int,Iterable,目前正在使用Python 3.3。我目前有一个问题,就是如何编写一个函数,将一个iterable和一个int作为参数,并从iterable生成值,从第一个开始,跳过int指定的值数 我的代码如下: def skipping(iterable,n=0): _iters = iter(iterable) try: while True: current = next(_iters) count = n

目前正在使用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
当我调用
跳过('abcdefghijklmnopqrstuvwxyz',1)
时。我使用
.join()

bdfhjlnprtvxz已经提供了以下功能:

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

我不允许使用itertools内置模块,这是一个练习,所以我想知道如何解决这个问题。哈哈。@user2559679:请参阅为
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