6
votes

Comment trouver la longueur d'une liste multidimensionnelle?

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? xxx

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?


2 commentaires

Avec python, il y a toujours.


Les listes sont-elles limitées à 2 niveaux ou peuvent-ils être plus profonds?


4 Réponses :


11
votes

Que diriez-vous:

sum(len(x) for x in multilist)


0 commentaires

4
votes

Alternative à la solution de @ mgilson

sum(map(len, multilist))


0 commentaires

0
votes

Une autre alternative (c'est ceci ou regarder des conférences mathématiques manquées ...) xxx pré>

Ceci permet différents degrés de 'multi-dimensacalité' em> (si c'était un mot) à coexister. p>

par exemple: p> xxx pré>

ou, pour permettre différents types de collecte p> xxx pré>

EG: P>

>>> getLength([ 1, 2, (1,3,4), {4:3} ])
6
>>> getLength(["cat","dog"])
2


3 commentaires

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" 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 __ existe dans Python 3, et même dans Python 2, appelant iter ("foo") fonctionne simplement bien.



1
votes

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


0 commentaires