Comment trouvez-vous la longueur d'une liste multidimensionnelle?
J'ai monté un moyen moi-même, mais est-ce le seul moyen de trouver le nombre de valeurs dans une liste multidimensionnelle? p> Je suis sûr qu'il existe un moyen beaucoup plus simple de trouver la longueur d'une liste multidimensionnelle, mais len (liste) ne fonctionne pas, car il ne donne que le numéro des listes à l'intérieur. Existe-t-il une méthode plus efficace que celle-ci? P> p>
4 Réponses :
Que diriez-vous:
sum(len(x) for x in multilist)
Alternative à la solution de @ mgilson
sum(map(len, multilist))
Une autre alternative (c'est ceci ou regarder des conférences mathématiques manquées ...) Ceci permet différents degrés de 'multi-dimensacalité' em> (si c'était un mot) à coexister. p> par exemple: p> ou, pour permettre différents types de collecte p> EG: P> >>> getLength([ 1, 2, (1,3,4), {4:3} ])
6
>>> getLength(["cat","dog"])
2
Juste une tête de tête que la dernière version de ce code se cassera s'il y a des chaînes dans la structure de données, car "A" code> est ibler et son élément isolé est également "A" < / code> (conduisant à une erreur lorsque vous touchez la limite de récursivité). Je suppose que cela recueille également infiniment si vous créez une liste qui contient une référence à elle-même, mais ce n'est pas susceptible de se produire par accident. De plus, vous ne compterez pas correctement les éléments dans des conteneurs qui sont des valeurs de dictionnaires (bien que vous compteriez les valeurs des touches TUPLE).
Je ne pense pas que cela devrait. Ma version de Python (2.7.2) soulève une erreur pour "chaîne" .__ iter__
Hmm, quelle est impair. Str .__ ITER __ code> existe dans Python 3, et même dans Python 2, appelant iter ("foo") code> fonctionne simplement bien.
Si vous souhaitez que le nombre d'éléments dans n'importe quelle liste N-dimensionnelle, vous devez utiliser une fonction récursive comme ceci:
def List_Amount(List):
return _List_Amount(List)
def _List_Amount(List):
counter = 0
if isinstance(List, list):
for l in List:
c = _List_Amount(l)
counter+=c
return counter
else:
return 1
Avec python, il y a toujours.
Les listes sont-elles limitées à 2 niveaux ou peuvent-ils être plus profonds?