2017-03-03 45 views
-1

你好我有兩個函數使用lambda,map,filter操作符,我想知道它們如何以更簡單的格式重寫。如何在不使用lambda,map和filter的情況下編寫這些函數?

while not all((map(lambda x: G.vertex[x][y], G.vertices()))) 

v = list((filter(lambda x: not G.vertex[x][y],G.vertices()))) 

ý變量表示一個布爾值。

有沒有更好的方法來重寫它們,這也會提高性能?

謝謝

+0

您可以使用[list解析](http://www.secnetix.de/ olli/Python/list_comprehensions.hawk)。但我不認爲這將在性能方面發生很大變化。 – languitar

+0

你還沒有告訴我們'y'是什麼? – Elmex80s

+0

你應該解釋每個表達式應該做什麼。什麼是甚至存儲在'G.vertex [x] [y]'內?它是一個布爾值,一個int,一個字符串? –

回答

0

您可以使用生成器表達式和列表理解:

while not all(G.vertex[x][y] for x in G.vertices()): 
    v = [x for x in G.vertices() if not G.vertex[x][y]] 

一般來說,map(f, lst)相當於1)(f(x) for x in lst)filter(f, lst)(x for x in lst if f(x))。你也可以結合map(g, filter(f, lst))(g(x) for x in lst if f(x))。另一方面,filter(f, map(g, lst))稍微複雜一些,因爲您必須首先應用g。你可以把它寫成(y for y in (g(x) for x in lst) if f(y))(g(x) for x in lst if f(g(x)))(但後者將不得不申請g兩次)。


1)注意的是Python 2,mapfilter迴歸名單,但發電機在Python 3

相關問題