2013-04-13 26 views
1

我有一個網站的麪包屑,我想從一開始就用lambda表達式刪除所有「Home」條目。從一開始就使用lambda刪除列表條目

喜歡的東西:

lambda v: v[1:] if v and v[0] == 'Home' else v 

但我想刪除的倍數,而不只是第一個,也是唯一從一開始,因此:

['Home', 'Home', 'Home and Garden', 'Home', 'Kitchen'] 

變爲:

['Home and Garden', 'Home', 'Kitchen'] 

回答

5

也許這就是你要去的地方lambda

>>> F = lambda v: F(v[1:]) if v and v[0] == 'Home' else v 
>>> L = ['Home', 'Home', 'Home and Garden', 'Home', 'Kitchen'] 
>>> F(L) 
['Home and Garden', 'Home', 'Kitchen'] 

然而,這將是低效和Python已經有這個工具:

>>> from itertools import dropwhile 
>>> L = ['Home', 'Home', 'Home and Garden', 'Home', 'Kitchen'] 
>>> list(dropwhile(lambda x: x == 'Home', L)) 
['Home and Garden', 'Home', 'Kitchen'] 

或者:

​​

這應該是更快,鑽需要一些更多的進口

+0

這萬分感謝。我的lambda結果是:'lambda L:list(dropwhile(partial(eq,「Home」),L))'。 –