Jaki jest najlepszy sposób na zsumowanie dwóch lub więcej list, nawet jeśli mają one różne długości?Listy sum o różnych długościach
Na przykład mam:
lists = [[1, 2], [0, 3, 4], [5]]
a wynik powinien być:
result = [6, 5, 4]
Jaki jest najlepszy sposób na zsumowanie dwóch lub więcej list, nawet jeśli mają one różne długości?Listy sum o różnych długościach
Na przykład mam:
lists = [[1, 2], [0, 3, 4], [5]]
a wynik powinien być:
result = [6, 5, 4]
Można użyć itertools.izip_longest()
i użyć fillvalue
równą 0
In [6]: [sum(x) for x in itertools.izip_longest(*lists, fillvalue=0)]
Out[6]: [6, 5, 4]
dla Pythona < 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]
(pod warunkiem, że użytkownik nie utknął w Pythonie <2.6) –
Najlepszym wymyśliłem jest następujący:
result = [sum(filter(None, i)) for i in map(None, *lists)]
To nie jest tak źle, ale muszę dodać NoneTypes a następnie filtrować je w celu podsumowania.
'Wyzwanie dla najbardziej pytonicznej drogi jest nadal otwarte. - co jest tak niepytonnego w odniesieniu do' izip_longest'? –
Nic, to tylko otwarte pytanie, bez jednej poprawnej odpowiedzi. Pytanie miało na celu zebranie wielu sposobów wykonania tego zadania, aby nauczyć się nowych metod rozwiązania problemu. –
To nie jest pytanie, które pasuje do stackoverflow. Prawdopodobnie zostaniesz oznaczony jako "niestrudzony". –