当前位置: 首页 > 面试题库 >

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

微生曾琪
2023-03-14
问题内容

我可能会以错误的方式处理此问题,但我想知道如何在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。

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

提前致谢!


问题答案:

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迭代器? 例如: 此打印: 我想打印: 编辑:抱歉,这个问题让人们感到困惑。我对为什么当我在for循环中尝试更改迭代器时,for循环在下一次迭代中忽略它很感兴趣。 其他人已经提交了一个答案来清除我的困惑。范围创建一个列表,然后for循环将迭代器分配给列表中的下一个变量。

  • 本节我们探索的主题是迭代与循环。循环通常在计算机编程用用于自动执行重复性任务。 在Python中最常用的迭代形式就是for循环了。for循环允许你迭代出列表中所有的项,迭代出来后你可以做任何你想做的事情。 比如,我们创建了一个列表,并打印出其中所有元素的平方。 >>> for value in [0, 1, 2, 3, 4, 5]: ... print(value * value) ... 0 1

  • 问题内容: 我想了解更多有关的信息,所以如果我错了,请纠正我。 迭代器是一个对象,该对象具有指向下一个对象的指针,并作为缓冲区或流(即,链表)读取。它们特别有效,因为它们所做的只是通过引用而不是使用索引来告诉您下一步是什么。 但是我仍然不明白为什么会发生以下行为: 经过迭代器()的第一个循环后,就好像它已被消耗并且留空,因此第二个循环()不输出任何内容。 但是,我从未为变量分配新值。 循环幕后到底

  • 问题内容: 如何从内部循环增加外部迭代器? 更准确地说: 我正进入(状态 , 但是我想要 上面是我想要实现的简化想法。 这是我的Java代码: 问题答案: 似乎您想使用范围功能的step参数。从文档: range(start,stop [,step])这是创建包含算术级数的列表的通用功能。它最常用于for循环中。参数必须是纯整数。如果省略了step参数,则默认值为1。如果省略了start参数,则默

  • 2.3 循环与遍历 程序的比人肉强大的另一个特性就是可以任劳任怨地重复地做些单调无聊(或有聊)的 工作。本节介绍在 VimL 语言中,如何控制程序,命令其循环地按规则干活。 遍历集合变量 首先介绍的是如何依次访问列表如字典内的所有元素,毕竟在 2.1 节介绍的索引方法只 适于偶尔访问查看某个具体的元素。这里要用到的是for ... in 语法。 例如遍历列表: : let list = [0, 1

  • 我有一个游戏,每隔X秒它就会把内存中改变的值写回我的数据库。当编辑这些值保存的数据时,它们存储在容器(HashMaps和ArrayList)中。 为了简单起见,假设我只有一个容器可以写入数据库: 我的DB写入循环: 我的更新方法: 我是否需要在为dbEntitiesDeletesBacklog HashMap和本摘录中未包含的其他容器“保存到DB”时创建某种锁定机制?我想我需要这样做,因为它会创建