2011-04-28 2 views
2

J'ai problème suivant:somme Python difficulté

x=[['1', '7', 'U1'], ['1.5', '8', 'U1']] 
y=sum(sum(float(el) for el in els[:-1]) for els in x) 

print(x) 
print(y) 

Dans cette somme de code, somme tous les chiffres, mais je veux résumer de la première [ '1', '7', 'U1'], premier numéro et de secondes [ '1,5', '8', 'U1'] premier nombre, et même pour la deuxième ...

suite afin de remplir finale regard comme "matrice":

y= 
[ [2.5],        #1+1.5=2.5 
    [15]]         #7+8=15 

Répondre

8
>>> x=[['1', '7', 'U1'], ['1.5', '8', 'U1']] 
>>> zip(*x) 
[('1', '1.5'), ('7', '8'), ('U1', 'U1')] 
>>> [[sum(float(n) for n in nums)] for nums in zip(*x)[:-1]] 
[[2.5], [15.0]] 

zip(*x) est un moyen simple de transposer la matrice (permuter les lignes < -> colonnes), ce qui vous permet de facilement additionner chaque ligne.