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]
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]
È 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]
(a condizione che l'utente non sia bloccato con Python <2.6) –
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.
'La sfida per il modo più poderoso è ancora aperta. - Cosa c'è di così poco suggestivo in' izip_longest'? –
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. –
Questo non è il tipo di domanda adatta allo stackoverflow. Probabilmente verrai contrassegnato come "non costruttivo". –