2016-12-29 1 views
-3

Ich habe ein Problem, wo ich versuche, 1 bestimmtes Element aus einer Liste mit der Lambda-Funktion auszudrucken.Lambda-Funktion gibt ganze Liste statt Element zurück

Ich habe eine Liste Ich möchte mit Lambda filtern, und ich will aus der Liste nur „Python“ drucken:

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

Wenn ich stattdessen auf der Konsole ausgegeben bekommen die ganze Liste der Ausführung! Ich kann nicht sehen, was ich hier falsch mache.

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

print filter(lambda x: x[2], languages) 

Irgendwelche Vorschläge?

+2

sind keine Sprachen [2] ausreichend für diese Angelegenheit? – YOBA

Antwort

5

Sie fragen filter(), um alle Elemente zurückzugeben, deren 3. Buchstabe existiert und nicht leer ist. Das gilt für alle Elemente, also bekommst du die ganze Liste. Beachten Sie, dass die Filterfunktion auf jedes einzelne Element in der gefilterten Liste angewendet wird. Von der [filter() Funktion Dokumentation] (

Beachten Sie, dass filter(function, iterable) zu [item for item in iterable if function(item)] äquivalent ist, wenn die Funktion nicht None ist und [item for item in iterable if item] wenn Funktion None ist.

Wenn Sie das dritte Element wollten, sollten Sie nicht verwenden Filterung, wählen Sie einfach, dass ein Element:

print languages[2] 

Wenn Sie auf einem bestimmten Wert filtern wollte, verändern die 0.123., um True für die Werte zurückzugeben, die Sie aus der Liste abrufen möchten. Sie könnten für alle Werte zu stellen, die mit P, zum Beispiel zu starten:

print filter(lambda x: x.startswith('P'), languages) 
+0

Also im Grunde gibt es wie eine eingebaute for-Schleife in der Filterfunktion? –

+0

@ DanielBäck: Ja, die 'filter()' -Funktion muss die Eingabeliste durchlaufen, um die Elemente zu filtern. –

1

Sie können wie folgt filtern:

languages = ["HTML", "JavaScript", "Python", "Ruby"] 

print filter(lambda x: x=='Python', languages) 
Verwandte Themen