2017-07-11 10 views
2

私は十分な値をたくさん持つリスト(L1と呼ぶ)を持っています。範囲内のすべての値を保持しながら、特定の範囲外のすべての値を削除するにはどうすればよいですか?
例えば、および指定された範囲外のリスト内のすべての値を削除するpython

L1 = [-2, 0.1, 0.75, 4] 

私は私がそこに聞いたすなわち

L2 = [0.1, 0.75] 

、私の出力は、新しいリストになりたい[1、-1]のは、私のように私の範囲を定義しましょう(これは私の人生のためのSOの質問を見つけることができませんが)numpyでこれを行う方法でしたが、私は別の方法があったのだろうか、ちょうど内蔵の関数を使用しているのだろうか?この種のことは、それでもいいです)。

答えて

1

ただ、リストの内包を使用します。

L2 = [ x for x in L1 if -1 <= x <= 1 ] 
0

filterのための完璧な仕事のように思えます。 (Python 2でのみ!)

L1 = [-2, 0.1, 0.75, 4] 
filtered_L1 = list(filter(lambda x: -1. <= x <= 1., L1)) 
print(filtered_L1) 
# [0.1, 0.75] 

Python 3あなたはリストの理解力が良いです。

L1 = [-2, 0.1, 0.75, 4] 
L1 = [x for x in L1 if -1. <= x <= 1.] 
print(L1) 
# [0.1, 0.75] 
+0

ない(BrightOneの[解答](https://stackoverflow.com/a/45038498/2897372)@参照) 。 –

+0

うわー、感謝@Błotosmętek、それを知らなかった。 Python 2.7 virtualenvはもう一度私を得ました:( –

0

filterを使用してください。

L2 = list(filter(lambda x: -1 <= x <= 1, L1)) 
0

これは別のものです。

L2 = [ii for ii in L1 if (ii <= 1 and ii >= -1)] 
2

boolean indexing with NumPyを使用してください。大きなリスト/アレイの場合、これはリスト内包またはfilterアプローチよりもはるかに高速になりますのpython3で

>>> import numpy as np 
>>> L1 = [-2, 0.1, 0.75, 4] 
>>> A1 = np.array(L1)   # convert it to an array 
>>> A1[(A1 >= -1) & (A1 <= 1)] # remove all values that are not in the range [-1, 1] 
array([ 0.1 , 0.75]) 
+1

正解。リスト内包表記ははるかに遅くなります – user2699

関連する問題