2
votes

Trouver la somme du premier élément dans une liste de listes en Python

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']....]


2 commentaires

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?


4 Réponses :


3
votes

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


0 commentaires

4
votes

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])


0 commentaires

2
votes

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


2 commentaires

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.



2
votes

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.


0 commentaires