Python liste

Fermé
tzir - 25 déc. 2009 à 00:51
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 25 déc. 2009 à 12:59
Bonjour,

je voudrais pouvoir faire la différence entre [[a,b],[c,d]] et [e,f] car quand je fais len(l) ça me donne 2 et len(l[0]) n'existe pas dans le 2ème cas. Donc je voudrais un moyen pour faire la différence entre ces 2 listes.

merci

1 réponse

heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 130
25 déc. 2009 à 12:59
Salut,

repr(li)[0:2]=='[['
str(li)[0:2]=='[['
type(li[0])==ListType

vont toutes les trois donner les même résultats:
True sur une liste li = [ [12,34,2],[445,2,9],[9,78] ] et
False sur une liste lo = [ (777,666),[34,23],[1,2,3,4] ]

Mais elles donneront à tort True sur une liste ly = [ [12,34,2],(28,9),[90,99] ]

Si on veut vraiment s’assurer que tous les éléments d’une liste sont des sous-listes, il faut utiliser all()
from types import ListType

print all(type(u)==ListType for u in li)
print all(type(u)==ListType for u in ly)
print all(type(u)==ListType for u in lo)

donne bien
True
False
False


Nota, on n’est pas obligé d’importer la valeur ListType:
print all(type(u)==type([]) for u in li)
mais cette écriture oblige le programme à extraire le type de [] à chaque fois que type([]) apparaît dans une instruction
0