2015-04-20 6 views
6

Ho un elenco annidato e sto cercando di ottenere la somma e stampare l'elenco che ha il valore numerico più alto quando i singoli numeri sono sommati insiemeQual è il modo corretto di stampare un elenco annidato con il valore più alto in Python

x = [[1,2,3],[4,5,6],[7,8,9]] 
highest = list() 

for i in x: 
    highest.append(sum(i)) 

for ind, a in enumerate(highest): 
    if a == max(highest): 
     print(x[ind]) 

sono stato in grado di stampare i risultati, ma penso che ci dovrebbe essere un modo semplice e più Pythonic di fare questo (magari usando una lista di comprensione).

Come faccio?

risposta

13

ne dite:

print(max(x, key=sum)) 

Demo:

>>> x = [[1,2,3],[4,5,6],[7,8,9]] 
>>> print(max(x, key=sum)) 
[7, 8, 9] 

Questo funziona perché max (insieme a una serie di altri comandi incorporati pitone come min, sort ...) accetta una funzione da utilizzare per il confronto. In questo caso, ho appena detto che dovremmo confrontare gli elementi in x in base al loro singolo sum e Bob's nostro zio, abbiamo finito!

+1

Grazie, sembra che ci sia sempre un modo semplice e breve di fare le cose in python – danidee

+0

@danidee - Non sempre, ma frequentemente. Se * non * è un modo breve e semplice per farlo, di solito lo prendo come un avvertimento per ripensare a quello che sto cercando di fare per vedere se potrebbe esserci un modo migliore per progettare la funzione che sono lavorando su. – mgilson

Problemi correlati