我的功能f
需要int
并返回bool
。我想找到x
为f(x)
的最小非负整数False
。我怎么能用大多数pythonic方式(理想情况下是一行)?
我现在就是这样做的:
x = 0
while f(x):
x += 1
print(x)
我想要类似的东西:
x = <perfect one line expression>
print(x)
答案 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.filterfalse
和itertools.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)