# Find a value in a list [duplicate]

As for your first question: “`if item is in my_list:`” is perfectly fine and should work if `item` equals one of the elements inside `my_list`. The item must exactly match an item in the list. For instance, `"abc"` and `"ABC"` do not match. Floating point values in particular may suffer from inaccuracy. For instance, `1 - 1/3 != 2/3`.

As for your second question: There’s actually several possible ways if “finding” things in lists.

### Checking if something is inside

This is the use case you describe: Checking whether something is inside a list or not. As you know, you can use the `in` operator for that:

``````3 in [1, 2, 3] # => True
``````

### Filtering a collection

That is, finding all elements in a sequence that meet a certain condition. You can use list comprehension or generator expressions for that:

``````matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
``````

The latter will return a generator which you can imagine as a sort of lazy list that will only be built as soon as you iterate through it. By the way, the first one is exactly equivalent to

``````matches = filter(fulfills_some_condition, lst)
``````

in Python 2. Here you can see higher-order functions at work. In Python 3, `filter` doesn’t return a list, but a generator-like object.

### Finding the first occurrence

If you only want the first thing that matches a condition (but you don’t know what it is yet), it’s fine to use a for loop (possibly using the `else` clause as well, which is not really well-known). You can also use

``````next(x for x in lst if ...)
``````

which will return the first match or raise a `StopIteration` if none is found. Alternatively, you can use

``````next((x for x in lst if ...), [default value])
``````

### Finding the location of an item

For lists, there’s also the `index` method that can sometimes be useful if you want to know where a certain element is in the list:

``````[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
``````

However, note that if you have duplicates, `.index` always returns the lowest index:……

``````[1,2,3,2].index(2) # => 1
``````

If there are duplicates and you want all the indexes then you can use `enumerate()` instead:

``````[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
``````