我有一个列表(让它称之为L1),带有大量的十进制值。如何在保持所有值在范围内的同时删除某些指定范围之外的所有值? 例如,让我们说我的范围定义为[-1,1]和
L1 = [-2, 0.1, 0.75, 4]
我希望我的输出成为新列表,即
L2 = [0.1, 0.75]
我听说有一种方法可以用numpy来做到这一点(虽然我无法找到生活中的SO问题),但我想知道是否有另一种方式,只是使用内置函数(当然,如果numpy对于这类事情更好,那么那也很好)。
答案 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)]