Dans mon programme, l'utilisateur saisit le numéro n
, puis le nombre n
de chaînes, qui sont stockées dans une liste.
J'ai besoin d'un code tel que si un certain index de liste existe, alors exécutez une fonction.
Ceci est rendu plus compliqué par le fait que j'ai imbriqué si des déclarations sur len(my_list)
.
Voici une version simplifiée de ce que j'ai maintenant, qui ne fonctionne pas:
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.
Pourrait-il être plus utile que vous utilisiez la longueur de la liste len(n)
pour informer votre décision plutôt que de cocher n[i]
pour chaque longueur possible?
J'ai besoin d'un code tel que si un certain index de liste existe, lancez une fonction.
C'est l'utilisation idéale pour un try block :
ar=[1,2,3]
try:
t=ar[5]
except IndexError:
print 'sorry, no 5'
Cependant, par définition, tous les éléments d’une liste Python entre 0
et len(the_list)-1
existent (c’est-à-dire qu’il n’est pas nécessaire d’essayer, sauf si vous connaissez 0 <= index < len(the_list)
).
Vous pouvez utiliser enumerate si vous souhaitez que les index soient compris entre 0 et le dernier élément:
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 vous recherchez une pensée d'index définie, je pense que vous posez la mauvaise question. Vous devriez peut-être envisager d'utiliser un conteneur mapping (tel qu'un dict) par rapport à un conteneur { séquence } (telle qu'une liste). Vous pouvez réécrire votre code comme ceci:
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)
Fonctionne comme ceci:
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
Vous pouvez également utiliser la méthode .get plutôt que d'essayer/sauf pour une version plus courte:
>>> something_to_do.get(3, default)('bob')
some thing 1 done with bob
>>> something_to_do.get(22, default)('alice')
nothing done with alice
len(nams)
devrait être égal à n
dans votre code. Tous les index 0 <= i < n
"existent".
Utiliser la longueur de la liste serait la solution la plus rapide pour vérifier si un index existe:
def index_exists(ls, i):
return (0 <= i < len(ls)) or (-len(ls) <= i < 0)
Cela vérifie également les indices négatifs et la plupart des types de séquence (comme ranges
et str
s) ayant une longueur.
De toute façon, si vous avez besoin d'accéder ultérieurement à l'élément à cet index, il est plus facile de demander pardon que l'autorisation , et il est également plus rapide et plus pythonique. Utilisez try: except:
.
try:
item = ls[i]
# Do something with item
except IndexError:
# Do something without the item
Ce serait comme opposé à:
if index_exists(ls, i):
item = ls[i]
# Do something with item
else:
# Do something without the item
J'ai besoin d'un code tel que si un certain index de liste existe, alors exécutez une fonction.
Vous savez déjà comment tester cela et en fait effectuez déjà de tels tests dans votre code .
Les indices valides pour une liste de longueur n
sont 0
à n-1
inclus.
Ainsi, une liste a un index i
si et seulement si la longueur de la liste est au moins i + 1
.
Si vous souhaitez itérer les données d'acteur insérées:
for i in range(n):
if len(nams[i]) > 3:
do_something
if len(nams[i]) > 4:
do_something_else
Cela peut être fait simplement en utilisant le code suivant:
if index < len(my_list):
print(index, 'exists in the list')
else:
print(index, "doesn't exist in the list")
Vous pouvez essayer quelque chose comme ça
list = ["a", "b", "C", "d", "e", "f", "r"]
for i in range(0, len(list), 2):
print list[i]
if len(list) % 2 == 1 and i == len(list)-1:
break
print list[i+1];
ok, donc je pense que c'est réellement possible (pour des raisons de discussion):
>>> your_list = [5,6,7]
>>> 2 in Zip(*enumerate(your_list))[0]
True
>>> 3 in Zip(*enumerate(your_list))[0]
False
Beaucoup de réponses, pas les plus simples.
Pour vérifier si un index 'id' existe dans dict dict:
if 'id' in Dict
renvoie true si 'id' existe.