J'ai une liste imbriquée newlist . Je veux trouver la somme des valeurs comme '£2.99','£4.99'
newlist = [['£2.99', '1', '16-Feb-19'], ['£4.99', '2', '16-Feb-19'], ['£2.99', '1', '15-Feb-19']....]
4 Réponses :
Vous pouvez utiliser une expression de générateur et additionner le premier élément de chaque liste (il suffit de le découper avec [1:] pour sauter le  £ code>): my_list = [['£2.99', '1', '16-Feb-19'], ['£4.99', '2', '16-Feb-19'],
['£2.99', '1', '15-Feb-19']]
sum(float(l[0][1:]) for l in my_list)
# 10.97
Essayez ceci:
10.97
Comme @darksky l'a mentionné, j'expliquerai ici un peu plus:
sum retournera la somme de un élément itérable.
float convertira les chaînes en flottant comme "2.99" -> 2.99
et Replace est évident.
le résultat sera:
sum([float(i[0].replace('£','')) for i in a])
Utilisez list comprehensions pour résoudre ce problème:
l= [['£2.99', '1', '16-Feb-19'], ['£4.99', '2', '16-Feb-19'], ['£2.99', '1', '15-Feb-19']]
# 1. replace() will replace the first argument '£' with second argument (empty space).
# 2. map(): It takes two arguments, where first argument is the datatype
# you wish to convert to and second argument is value we want to convert.
# 3. list(): Since the list comprehension gives us the list of mapping, where as we need to
# convert it to proper proper list with numbers, and that's why we use list()
# to do so.
sum(list(map(float,[i[0].replace('£','') for i in l])))
10.97
Identique à l'autre réponse @cph_sto, sum peut prendre un générateur, pas besoin d'extraire une liste de la carte. Il n'y a en fait aucun besoin pour la carte, car vous n'avez qu'une chaîne dans chaque itération ayant tranché avec le premier élément
@yatu j'ai remarqué cela. Mais, je laisserais cela rester ainsi car d'autres personnes pourraient voir que certaines de mes étapes étaient redondantes, et elles s'abstiennent de le faire.
Voici une réponse différente:
data = [['£2.99', '1', '16-Feb-19'], ['£4.99', '2', '16-Feb-19'], ['£2.99', '1', '15-Feb-19']]
sum = 0.0
for item in data:
formatted = item[0][1:]
sum += float(formatted)
Une fois ce code terminé, sum sera égal à 10,97, le résultat.
Pouvez-vous élaborer et montrer un exemple reproductible minimal qui "ne fonctionne pas"? À quoi vous attendiez-vous et que s'est-il réellement passé? Si vous avez une exception / erreur, publiez la ligne sur laquelle elle s'est produite et les détails de l'exception / erreur. Veuillez modifier ces détails ou nous ne pourrons peut-être pas vous aider. Veuillez consulter Comment demander et La question parfaite .
Copie possible de Comment additionner la première valeur de chaque tuple dans une liste de tuples en Python?