pythonキーワードin
をフィルタに使用できますか?私はバイナリ、単項、代入演算は関数呼び出しと同等であることを知っています。pythonの `in`キーワードをフィルタに使用する関数
''!=3
が
''.__ne__(3)
in
機能のために類似したものがある
filter(list1.__in__, list2)
私は、これは機能で書き込みを行うことができると思います...しかし、私はちょうどそれがすでに構築されているかどうかを知りたいです。
pythonキーワードin
をフィルタに使用できますか?私はバイナリ、単項、代入演算は関数呼び出しと同等であることを知っています。pythonの `in`キーワードをフィルタに使用する関数
''!=3
が
''.__ne__(3)
in
機能のために類似したものがある
filter(list1.__in__, list2)
私は、これは機能で書き込みを行うことができると思います...しかし、私はちょうどそれがすでに構築されているかどうかを知りたいです。
あなたは__contains__
をお探しですか?
>>> [1, 2, 3].__contains__(2)
True
>>> [1, 2, 3].__contains__(4)
False
そして、あなたが何をしたいのために:
>>> list1 = [2, 4, 6, 8, 10]
>>> filter(list1.__contains__, [1, 2, 3, 4, 5])
[2, 4]
filter(list1.__contains__, list2)
をよりきれいにと書かれている:
[ v for v in list2 if v in list1 ]
と同等性を示すこと:
>>> list1 = [2, 4, 6, 8, 10]
>>> list2 = [1, 2, 3, 4, 5]
>>> [ v for v in list2 if v in list1 ]
[2, 4]
一般に、operator
モジュールの機能を使用する必要があります。この場合はoperator.contains
になります。
しかし、セットを使用してこれを行う方法は、はるかに効率があります:
In [1]: list1 = [2, 4, 6, 8, 10]
In [2]: list2 = [1, 2, 3, 4, 5]
In [3]: list(set(list1) & set(list2))
Out[3]: [2, 4]
注:&
オペレータが交差点です。
Dan Dの回答のように、リストの理解が間違いなくこれを実行する最良の方法です。あなたが引数として別の関数を取る関数でin
またはnot
のようなものを使用したい場所より一般的なケースでは、しかし、あなたは、ラムダ関数を使用することができます。
>>> list1 = [2, 4, 6, 8, 10]
>>> list2 = [1, 2, 3, 4, 5]
>>> in_check = lambda item: item in list1
>>> filter(in_check, list2)
[2, 4]
繰り返しますが、私はこれを提示あなたの一般的な知識;この特定のケースを処理する最善の方法は、Dan D.の答えのように、リストの理解に間違いありません。 Pythonのlambdasの詳細についてはhereをご覧ください。
'operator'モジュールの関数は、はるかに高速であるため、使うべきです。 – schlamar
@ ms4py:私はほとんどのケースでは、「x in y」の読みやすさと使いやすさの向上が、演算子モジュールを使用する利点を上回ると主張します。私はパフォーマンスの向上が必要であることを知った後、 'operator'モジュールだけを使用します。 –
セットを使用しても要素の順序は維持されません。 –