在python中循环条件

Posted

技术标签:

【中文标题】在python中循环条件【英文标题】:Loop with conditions in python 【发布时间】:2011-05-18 11:02:12 【问题描述】:

考虑下面的 C 代码:

for(int i=0; i<10 && some_condition; ++i)
    do_something();

我想用 Python 写一些类似的东西。我能想到的最好的版本是:

i = 0
while some_condition and i<10:
    do_something()
    i+=1

坦率地说,我不喜欢模仿 for 循环的 while 循环。这是由于忘记增加计数器变量的风险。解决此风险的另一种选择是:

for i in range(10):
    if not some_condition: break
    do_something()

重要说明

    some_condition并不是要在循环过程中计算,而是首先指定是否开始循环

    我指的是Python2.6

首选哪种风格?有更好的习惯用法吗?

【问题讨论】:

我认为这是个人喜好问题。 哪个版本的 Python? 我认为 Python 应该有一个类似 do &lt;expr&gt; times: 的结构,以允许您明确表明您实际上不会使用循环计数器。 Karl:for _ in range(10) 似乎是一种常用的表示方式,但如果您碰巧使用 gettext,这当然是一个可怕的想法。 【参考方案1】:

这可能不相关,但这是我习惯做的事情......如果some_condition 足够简单,请将其放入一个函数和filter 您迭代的项目中:

def some_condition(element):
    return True#False

for i in filter(some_condition, xrange(10)):
    pass

您也可以在迭代某些元素列表时使用这种方法。

selected = filter(some_condition, to_process)
for i, item in enumerate(selected):
    pass

同样,这可能不是你的情况,你应该根据你的问题选择过滤项目的方法。

【讨论】:

或者,让它更短,可读性更差:for i in filter(lambda x: True, range(10)): do_something()【参考方案2】:

一般来说,“range + break”样式是首选 - 但在 Python 2.x 中,使用 xrange 而不是 range 进行迭代(这会按需创建值而不是实际生成一个数字列表)。

但这总是取决于。在这种情况下,数字 10 有什么特别之处? some_condition 到底是什么?等等。

对更新的回应:

听起来some_condition 是一个“循环不变量”,即在循环期间不会改变。在这种情况下,我们应该先对其进行测试:

if some_condition:
  for i in xrange(10):
    do_something()

【讨论】:

10 和 range 只是示例,这可能是 for i in my_array。正如问题中所阐明的,some_condition 控制程序是需要执行循环还是完全跳过它 您的版本简单明了且有效。我只是想节省额外的缩进。谢谢【参考方案3】:

for 具有恒定上限的循环在 Python 中有点少见。如果您正在迭代 somearray,您可能会这样做:

for i in xrange(len(somearray)):
    if not some_condition:
        break
    do_sth_with(i, somearray[i])

或者,更好:

for i, item in enumerate(somearray):
    if not some_condition:
        break
    do_sth_with(i, item)

【讨论】:

以上是关于在python中循环条件的主要内容,如果未能解决你的问题,请参考以下文章

在python中循环条件

Python基础

Python无限循环

有没有办法在 Python (3) for 循环中执行条件?

为啥我的 while 循环中的条件在 python 中不起作用?

python循环怎么执行不了