我有功能f
需要int
並返回bool
。我想找到最小的非負整數x
,其中f(x)
是False
。我怎樣才能以最pythonic的方式(理想情況下一行)?找到最小的非負整數,其不滿足條件
這裏是我如何做到這一點現在:
x = 0
while f(x):
x += 1
print(x)
我想是這樣的:
x = <perfect one line expression>
print(x)
我有功能f
需要int
並返回bool
。我想找到最小的非負整數x
,其中f(x)
是False
。我怎樣才能以最pythonic的方式(理想情況下一行)?找到最小的非負整數,其不滿足條件
這裏是我如何做到這一點現在:
x = 0
while f(x):
x += 1
print(x)
我想是這樣的:
x = <perfect one line expression>
print(x)
這是使用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
與itertools.filterfalse
和itertools.count
類似功能的方法可能是
from itertools import filterfalse, count
x = next(filterfalse(f, count()))
或者你可以用dropwhile
,這同時performantly類似的跨Python 2和3保持相同的語法換出filterfalse
(感謝rici)。
from itertools import dropwhile, count
x = next(dropwhile(f, count()))
如果您想不進口單行線,一條路可能是一個列表理解(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)
我不是什麼專家Python的手段,但你三行代碼是我會寫和會滿意的。 – VPfB
@ VPfB,最後我用我的三行解決方案而不是單行解決方案,但有趣的是知道如何在單行中完成它:) – diraria