2012-10-22 14 views
11

Qual è il modo migliore per sommare due o più elenchi anche se hanno lunghezze diverse?Elenchi di somma con diverse lunghezze

Per esempio io ho:

lists = [[1, 2], [0, 3, 4], [5]] 

e il risultato dovrebbe essere:

result = [6, 5, 4] 
+0

'La sfida per il modo più poderoso è ancora aperta. - Cosa c'è di così poco suggestivo in' izip_longest'? –

+1

Niente, è solo una domanda aperta, senza una sola risposta corretta. La domanda era intesa a raccogliere diversi modi per svolgere il compito al fine di apprendere nuovi metodi per risolvere il problema. –

+0

Questo non è il tipo di domanda adatta allo stackoverflow. Probabilmente verrai contrassegnato come "non costruttivo". –

risposta

18

È possibile utilizzare itertools.izip_longest(), e utilizzare un fillvalue pari a 0

In [6]: [sum(x) for x in itertools.izip_longest(*lists, fillvalue=0)] 
Out[6]: [6, 5, 4] 

per Python < 2.6:

In [27]: ml = max(map(len, lists)) 

In [28]: ml  #length of the longest list in lists 
Out[28]: 3 

In [29]: [sum(x) for x in zip(*map(lambda x:x+[0]*ml if len(x)<ml else x, lists))] 
Out[29]: [6, 5, 4] 
+1

(a condizione che l'utente non sia bloccato con Python <2.6) –

0

Il migliore mi è venuta è la seguente:

result = [sum(filter(None, i)) for i in map(None, *lists)] 

Non è poi così male, ma devo aggiungere NoneTypes e poi filtrare in modo da riassumere.

Problemi correlati