我有以下玩具示例函式和串列理解:
def foo(lst):
if lst:
return lst[0] lst[1]
[foo(l) for l in [[], [1,2], [1,4]]]
結果是:
[None, 3, 4]
我怎樣才能避免Nones,我想避免if foo(l) is not None在串列 comp 中呼叫。請指教。
uj5u.com熱心網友回復:
如果您想避免多次呼叫該函式,您可以創建一個生成器,該生成器根據函式的結果生成。這是一個多一點的代碼,但避免了創建一個包含一堆None稍后必須過濾的值的串列,并且還避免了在串列理解中呼叫該函式兩次:
def expensive_function(lst):
# sometimes returns None...hard to know when without calling
if lst:
return lst[0] lst[1]
def gen_results(l):
for a in l:
res = expensive_function(a)
if res:
yield res
inp = [[], [1,2], [1,4]]
list(gen_results(inp))
# [3, 5]
此外,由于生成器是惰性的,因此如果您不需要串列,則無需創建串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510385.html
