2017-05-16 2 views
1

Angenommen, Sie haben eine Liste von Listen:Löschen gesamte Liste, wenn Lambda-Bedingung erfüllt ist

[[1,2,3,4,5,6],[2,3,4,5,6,7],['a',12,3,4,5,], ['a',123,4,5,6]] 

Kann ich löschen (mit lambda) die Listen mit a in ihrem ersten Element haben? Ich fange an, mit Pythons Lambda zu spielen, und das hat mich schon eine Weile verwirrt. Kann es gemacht werden?

+2

Sicher kann es getan werden, aber warum würden Sie es mit Lambda und nicht nur Listenverstehen verwenden (anders als nur lambdas lernen). Zeigen Sie auch Ihre Versuche bitte. – MooingRawr

Antwort

5

filter entfernt die Elemente aus der angegebenen Liste, für die die angegebene Funktion False zurückgibt. Listenkomprehensionen können mit einem Prädikat ähnlich verwendet werden.

>>> xss = [[1,2,3,4,5,6],[2,3,4,5,6,7],['a',12,3,4,5,], ['a',123,4,5,6]] 
>>> list(filter(lambda xs: len(xs) != 0 and xs[0] != 'a', xss)) 
[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7]] 
>>> [xs for xs in xss if len(xs) != 0 and xs[0] != 'a'] 
[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7]] 
+0

Richtige Antwort !! –

0

@rightfold ist richtig, aber wenn Sie möchten, um eine Liste es generisch machen mit 'a' in jeder Position:

>>>test_list = [[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7], ['a', 12, 3, 4, 5], ['a', 123, 4, 5, 6]] 
>>>filter(lambda x: len(x) > 0 and 'a' not in x, test_list) 
[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7]] 
>>>[x for x in test_list if len(x) > 0 and 'a' not in x] 
[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7]] 
0

Filter (lambda i: i wenn i [0]! = 'a' sonst falsch, [[1,2,3,4,5,6], [2,3,4,5,6,7], ['a', 12,3,4,5] , ['a', 123,4,5,6]]))

Verwandte Themen