找到不满足条件的最小非负整数

时间:2017-09-12 18:03:31

标签: python algorithm python-3.x

我的功能f需要int并返回bool。我想找到xf(x)的最小非负整数False。我怎么能用大多数pythonic方式(理想情况下是一行)?

我现在就是这样做的:

x = 0
while f(x):
    x += 1
print(x)

我想要类似的东西:

x = <perfect one line expression>
print(x)

3 个答案:

答案 0 :(得分:3)

这是,使用next

from itertools import count
x = next(i for i in count() if not f(i))

演示:

>>> def f(x):
...     return (x - 42)**2
... 
>>> next(i for i in count() if not f(i))
42

答案 1 :(得分:3)

itertools.filterfalseitertools.count的类似功能方法可能是

from itertools import filterfalse, count

x = next(filterfalse(f, count()))

或者您可以将filterfalse替换为dropwhile,虽然性能相似,但在Python 2和3中保持相同的语法(感谢rici )。

from itertools import dropwhile, count
x = next(dropwhile(f, count()))

答案 2 :(得分:1)

如果你想要没有导入的单行,一种方法可能是列表理解(Python 2.7 / PyPy):

def f(x):
  return True if x == 5 else False

x = [g(0) for g in [lambda x: x if f(x) else g(x+1)]][0]

print(x)