Necesito codificar de modo que si existe un cierto índice de lista, ejecute una función.
Este es el uso perfecto para un bloque de prueba :
ar=[1,2,3]
try:
t=ar[5]
except IndexError:
print('sorry, no 5')
# Note: this only is a valid test in this context
# with absolute (ie, positive) index
# a relative index is only showing you that a value can be returned
# from that relative index from the end of the list...
Sin embargo, por definición, todos los elementos en una lista de Python existen 0y len(the_list)-1existen (es decir, no hay necesidad de intentarlo, excepto si lo sabe 0 <= index < len(the_list)).
Puede usar enumerate si desea los índices entre 0 y el último elemento:
names=['barney','fred','dino']
for i, name in enumerate(names):
print(i + ' ' + name)
if i in (3,4):
# do your thing with the index 'i' or value 'name' for each item...
Si está buscando un pensamiento definido de 'índice', creo que está haciendo la pregunta incorrecta. Quizás debería considerar usar un contenedor de mapeo (como un dict) versus un contenedor de secuencia (como una lista). Podrías reescribir tu código así:
def do_something(name):
print('some thing 1 done with ' + name)
def do_something_else(name):
print('something 2 done with ' + name)
def default(name):
print('nothing done with ' + name)
something_to_do={
3: do_something,
4: do_something_else
}
n = input ("Define number of actors: ")
count = 0
names = []
for count in range(n):
print("Define name for actor {}:".format(count+1))
name = raw_input ()
names.append(name)
for name in names:
try:
something_to_do[len(name)](name)
except KeyError:
default(name)
Corre así:
Define number of actors: 3
Define name for actor 1: bob
Define name for actor 2: tony
Define name for actor 3: alice
some thing 1 done with bob
something 2 done with tony
nothing done with alice
También puede usar el método .get en lugar de probar / excepto para una versión más corta:
>>> something_to_do.get(3, default)('bob')
some thing 1 done with bob
>>> something_to_do.get(22, default)('alice')
nothing done with alice
ncomo un entero, no como una lista. Estoy confundido.