删除指定范围python之外的列表中的所有值

时间:2017-07-11 15:13:30

标签: python python-3.x numpy

我有一个列表(让它称之为L1),带有大量的十进制值。如何在保持所有值在范围内的同时删除某些指定范围之外的所有值? 例如,让我们说我的范围定义为[-1,1]和

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

我希望我的输出成为新列表,即

L2 = [0.1, 0.75]

我听说有一种方法可以用numpy来做到这一点(虽然我无法找到生活中的SO问题),但我想知道是否有另一种方式,只是使用内置函数(当然,如果numpy对于这类事情更好,那么那也很好)。

5 个答案:

答案 0 :(得分:3)

您可以使用boolean indexing with NumPy执行此操作。对于大型列表/数组,这可能比列表理解或filter方法快得多:

>>> 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 :(得分:2)

只需使用列表理解:

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

答案 2 :(得分: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]

答案 3 :(得分:0)

使用filter

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

答案 4 :(得分:0)

这是另一个。

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