微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python在循环内任意增加迭代器

如何解决python在循环内任意增加迭代器

Python中有一个很棒的软件包,名为itertools

但是在开始之前,它很好地解释了如何在Python中实现迭代协议。如果要在容器上提供迭代,请指定__iter__()提供迭代器类型的类方法“了解Python的’for’语句”是一篇不错的文章,涵盖了该for-in语句在Python中的实际工作方式,并提供了有关迭代器类型如何工作的很好概述。

看一下以下内容

>>> sequence = [1, 2, 3, 4, 5]
>>> iterator = sequence.__iter__()
>>> iterator.next()
1
>>> iterator.next()
2
>>> for number in iterator:
    print number 
3
4
5

现在回到itertools。该软件包包含用于各种迭代目的的函数。如果您需要进行特殊测序,那么这是第一个研究的地方。

底部,您可以找到“食谱”部分,其中包含使用现有itertools作为构建块来创建扩展工具集的食谱

一个有趣的功能可以完全满足您的需求:

def consume(iterator, n):
    '''Advance the iterator n-steps ahead. If n is none, consume entirely.'''
    collections.deque(itertools.islice(iterator, n), maxlen=0)

这是一个简短易懂的示例,说明其工作方式 (Python 2.5)

>>> import itertools, collections
>>> def consume(iterator, n):
    collections.deque(itertools.islice(iterator, n))
>>> iterator = range(1, 16).__iter__()
>>> for number in iterator:
    if (number == 5):
        # disregard 6, 7, 8, 9 (5 doesn't get printed just as well)
        consume(iterator, 4)
    else:
        print number

1
2
3
4
10
11
12
13
14
15

解决方法

我可能会以错误的方式处理此问题,但我想知道如何在python中处理此问题。

首先一些C代码:

int i;

for(i=0;i<100;i++){
  if(i == 50)
    i = i + 10;
  printf("%i\n",i);
}

好吧,我们永远不会看到50年代…

我的问题是,如何在python中做类似的事情?例如:

for line in cdata.split('\n'):
  if exp.match(line):
    #increment the position of the iterator by 5?
    pass
  print line

由于我在python方面的有限经验,我只有一个解决方案,引入一个计数器和另一个if语句。中断循环,直到exp.match(line)为true后计数器达到5。

必须有一种更好的方法来执行此操作,希望它不涉及导入另一个模块。

提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。