4

I have a list (let's call it L1) with plenty of decimal values. How do I remove all values outside of some specified range while keeping all values within the range?
For instance, let's say I define my range as [-1, 1] and

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

I would want my output to be a new list, i.e.

L2 = [0.1, 0.75]

I've heard there was a way to do this with numpy (though I can't find the SO question for the life of me), but I was wondering if there was another way, just using the built-in functions (of course if numpy is better for this sort of thing, then that's fine too).

5 Answers 5

13

You can do it using boolean indexing with NumPy. For large lists/arrays this can be much faster than a list comprehension or filter approach:

>>> 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])
Sign up to request clarification or add additional context in comments.

1 Comment

The right answer. List comprehensions will be much slower
4

Just use list comprehension:

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

Comments

0

Use filter.

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

Comments

0

Here is another.

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

Comments

0

Seems like the perfect job for filter. (only in 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 you are better off with a list comprehension;

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

2 Comments

Not in Python3 (see @BrightOne's answer).
Wow thanks @Błotosmętek, didn't know that. Python 2.7 virtualenv got me again :(

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.