2016-05-03 18 views

答えて

9

する場合、たとえば、リストからすべての文字列を排除する方法であります文字列です。また、あなたの変数listそれはどちらかlist

>>> from numbers import Real 
>>> lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help'] 
>>> [element for element in lst if isinstance(element, Real)] 
[1, 2, 3, 4] 

または

>>> [element for element in lst if isinstance(element, int)] 
[1, 2, 3, 4] 

または

>>> [element for element in lst if not isinstance(element, str)] 
[1, 2, 3, 4] 
1

に建てられた影@ user3100115として、リストの内包表記を使用するか、「Lispのを使用するに名前を付けていません/ラムダアプローチ "

>> l = [1, 2, 'a', 'b'] 
>> list(filter(lambda a: isinstance(a, int), l)) 
[1, 2] 

ところで、変数にはlistという名前を付けないでください。これはすでにPython関数です。 :)

+1

、その後、listcompまたはgenexprは常に速くなるだろうと同じように簡潔な(反復されている変数の短い名前を仮定した場合)。それらを動作させるために 'lambda 'が必要な場合は' map'/'filter'を使わないでください。 – ShadowRanger

+0

私はリストの理解度に関する答えが1つしかなかったので、この "lisp"アプローチを完全性のために追加しました。私はそれが遅かったのを知らなかった。ありがとう! –

2

あなたはisinstanceを使用していることを行うことができますが、私はあなたがの代わりに、ホワイトリストのみ数種類をしたくないブラックリストの種類を希望user3100115することにより、他の答えとは違って。あなたの特別なケースにはどちらが適しているのかはわかりません。輸入なしでも動作します。代わりに、リスト内包の

lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help'] 
filtered = [element for element in lst if not isinstance(element, str)] 
print(filtered) 
# [1, 2, 3, 4] 

、あなたもfilter組み込みを使用することができます。それはジェネレータを返すので、直接出力するには、まずそれをリストに変換する必要があります。しかし、繰り返し実行する場合(例:for -loopを使用)、それを変換しないでください。遅い評価のためにメモリが消費される速度が速くなります。大括弧を丸括弧で置き換えた場合、上記の例でも同じ結果が得られます。あなたは `filter`を使用するには、` lambda`が必要な場合は

lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help'] 
filtered = list(filter(lambda element: not isinstance(element, str), lst)) 
print(filtered) 
# [1, 2, 3, 4] 
関連する問題