在Python中编写“for-while”循环

时间:2014-04-13 07:45:25

标签: python python-2.7 python-3.x

什么是Pythonic(2.7,3)编写一个带有早期停止条件的for循环的方法?

例如

for item in lst:
    if not condition(item):
        break
    process(item)

4 个答案:

答案 0 :(得分:2)

你的方式看起来很棒!我通常会写:

for i in lst:
    if i > k:
        break
    process(i)

(不需要显式索引)。或者,如果你感到饥饿:

map(process, it.takewhile(lambda i: i < k, lst))

答案 1 :(得分:2)

您可以使用itertools.takewhile

from itertools import takewhile

for item in takewhile(condition, lst):
    process(item)

来自文档:

  

itertools.takewhile(predicate, iterable)

     

只要谓词为真,就创建一个从迭代中返回元素的迭代器。


要查找您的公共前缀,例如:

def common_prefix(s1, s2):
    return "".join(a for a, _ in takewhile(lambda t: t[0] == t[1], zip(s1, s2)))

答案 2 :(得分:0)

默认答案:已经写好的方式。

for item in lst:
    if not condition(item):
        break
    process(item)

答案 3 :(得分:0)

尝试建立一种新的列表理解语法,其中包含takewhile的概念。

在这种格式中,代码可以写成[列表理解的可怕方式,如没有值的单行迭代,由于害怕易受影响的头脑中的附带损害,因此不会在答案中给出]。

对于“两个字符串的公共前缀”的问题,我们有这样的事情:

def commonprefix(s1, s2):
    return ''.join(x for x, y in zip(s1, s2) while x==y)

不幸的是,似乎这些尝试无法得到任何令人满意的结果:http://stupidpythonideas.blogspot.com/2013/07/syntactic-takewhile.html