2016-12-29 11 views
-3

ラムダ関数を使用してリストから1つの特定の要素を出力しようとしています。lambda funtionは、要素の代わりに全体のリストを返します。

私は私がラムダを使用してフィルタリングすると、私は、リストからのみ「パイソン」をプリントアウトしたいリストを持っている:実行する場合

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

は私の代わりにコンソールに出力全体のリストを取得! 私はここで何が悪いのか分からない。

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

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

お勧めはありますか?

+2

はこの問題で十分な言語[2]ではありませんか? – YOBA

答えて

5

filter()には、の3文字目のが存在し、空でないすべての要素が返されるようにしています。それはすべての要素に当てはまるので、リスト全体が得られます。フィルタ関数は、フィルタリングされたリストのすべての要素に適用されることに注意してください。関数はNone[item for item in iterable if item]でない場合、関数はNoneある場合filter(function, iterable)[item for item in iterable if function(item)]と同等であること。

あなたは第三要素を望んでいた場合は、使用しないでください[filter()機能のドキュメント](

ノートからフィルタリングするには、その1つの要素を選択してください:

print languages[2] 

特定の値でフィルタリングする場合は、lambdaを使用して、リストから取得する値の場合はTrueを返します。あなたは、例えば、Pで始まるすべての値を求めることができます:

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

基本的に、フィルタ関数に組み込みのforループがありますか? –

+0

@DanielBäck:はい、 'filter()'関数は入力リストをループして要素をフィルタリングする必要があります。 –

1

あなたはこのようにフィルタリングすることができます。

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

print filter(lambda x: x=='Python', languages) 
関連する問題