# number - python not in list

## If list index exists, do X (7)

I need to code such that if a certain list index exists, then run a function.

You already know how to test for this and in fact are already performing such tests in your code.

The valid indices for a list of length `n` are `0` through `n-1` inclusive.

Thus, a list has an index `i` if and only if the length of the list is at least `i + 1`.

In my program, user inputs number `n`, and then inputs `n` number of strings, which get stored in a list.

I need to code such that if a certain list index exists, then run a function.

This is made more complicated by the fact that I have nested if statements about `len(my_list)`.

Here's a simplified version of what I have now, which isn't working:

``````n = input ("Define number of actors: ")

count = 0

nams = []

while count < n:
count = count + 1
print "Define name for actor ", count, ":"
name = raw_input ()
nams.append(name)

if nams[2]: #I am trying to say 'if nams[2] exists, do something depending on len(nams)
if len(nams) > 3:
do_something
if len(nams) > 4
do_something_else

if nams[3]: #etc.
``````

`len(nams)` should be equal to `n` in your code. All indexes `0 <= i < n` "exist".

Could it be more useful for you to use the length of the list `len(n)` to inform your decision rather than checking `n[i]` for each possible length?

Do not let any space in front of your brackets.

Example:

``````n = input ()
^
``````

Have a nice day.

It can be done simply using the following code:

``````if index < len(my_list):
print(index, ' exists in the list')
else:
print(index, " doesn't exist in the list")
``````

Using the length of the list would be the fastest solution to check if an index exists:

``````def index_exists(ls, i):
return (0 <= i < len(ls)) or (-len(ls) <= i < 0)
``````

This also tests for negative indices, and most sequence types (Like `ranges` and `str`s) that have a length.

If you need to access the item at that index afterwards anyways, it is easier to ask forgiveness than permission, and it is also faster and more Pythonic. Use `try: except:`.

``````try:
item = ls[i]
# Do something with item
except IndexError:
# Do something without the item
``````

This would be as opposed to:

``````if index_exists(ls, i):
item = ls[i]
# Do something with item
else:
# Do something without the item
``````

ok, so I think it's actually possible (for the sake of argument):

``````>>> your_list = [5,6,7]
>>> 2 in zip(*enumerate(your_list))[0]
True
>>> 3 in zip(*enumerate(your_list))[0]
False
``````