somme de la liste imbriquée dans Python
J'essaie de la somme d'une liste d'éléments imbriqués
e.g, nombres=[1,3,5,6,[7,8]], somme=30
J'ai écrit le code suivant
def nested_sum(L):
sum=0
for i in range(len(L)):
if (len(L[i])>1):
sum=sum+nested_sum(L[i])
else:
sum=sum+L[i]
return sum
Le code ci-dessus donne l'erreur suivante: l'objet de type " int " n'a pas de len()
J'ai aussi essayé len([L[i]]), ne fonctionne toujours pas
Quelqu'un peut aider? BTW, c'est Python 3.3
Essayez l'un des nombreux aplatir l'fonctions posté ici, jusqu'à présent, et tout simplement
Pour Python, si j'utilise l'appel récursif, dois-je m'inquiéter au sujet de prendre trop de temps que la pile va? Je sais que pour ce problème, je ne sera probablement pas vous soucier de ce
C'est probablement un peu tôt pour cela, mais si vous voulez réduire la consommation de mémoire, utiliser un générateur à la place.
sum(flatten(L))
Pour Python, si j'utilise l'appel récursif, dois-je m'inquiéter au sujet de prendre trop de temps que la pile va? Je sais que pour ce problème, je ne sera probablement pas vous soucier de ce
C'est probablement un peu tôt pour cela, mais si vous voulez réduire la consommation de mémoire, utiliser un générateur à la place.
OriginalL'auteur Jin | 2013-02-17
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
isinstance
pour vérifier si un élément est une liste ou non. Aussi, vous pouvez parcourir la liste réelle, pour rendre les choses plus simples.OriginalL'auteur Volatility
Il est généralement considéré comme plus pythonic à canard de type, plutôt qu'explicite la vérification de type. Quelque chose comme cela va prendre toute itératif, pas seulement des listes:
OriginalL'auteur Jaime
Un rapide récursivité qui utilise un lambda pour gérer les listes imbriquées:
rec
, appliquée sur une liste, sera de retour la somme (de manière récursive), sur une valeur de retour la valeur.OriginalL'auteur njzk2
Je somme la liste aplatie:
sum(flatten([(1, 2), [3, {4, 5}]]))
. Excellent!OriginalL'auteur dansalmo
Une solution alternative avec la compréhension de liste:
Edit:
Et pour les listes comportant plus de deux niveaux(thx @Volatilité):
OriginalL'auteur
Ce code fonctionne aussi.
OriginalL'auteur yashraj
Un exemple d'utilisation de filtre et de la carte et la récursivité:
Et voici un exemple d'utilisation de réduire et de récursivité
Un exemple d'utilisation de plain old récursivité:
Un exemple d'utilisation simulée de la récursivité:
De réglage pour la manipulation de l'auto-référentielle des listes est laissé comme exercice pour le lecteur.
OriginalL'auteur Broseph
OriginalL'auteur Alessandro Anderson