Если вы знаете, что списки будут одинаковой длины, вы можете сделать это:
AB = [A[i] + B[i] for i in range(len(A))]
В Python 2 вы можете использовать xrange
вместо range
, если ваши списки довольнобольшой.Я думаю, что это явный, простой, читаемый, очевидный способ сделать это, но некоторые могут отличаться.
Если списки могут быть разной длины, вам нужно решить, как вы хотите обрабатыватьлишние элементы.Допустим, вы хотите игнорировать дополнительные элементы того списка, который длиннее.Вот три способа сделать это:
AB = [A[i] + B[i] for i in range(min(len(A), len(B)))]
AB = map(sum, zip(A, B))
AB = [a + b for a, b in zip(A, B)]
Недостатком использования zip
является то, что он будет выделять список кортежей, который может занимать много памяти, если ваши списки уже велики.Использование for i in xrange
с подпиской не выделит всю эту память, или вы можете использовать itertools.izip
:
import itertools
AB = map(sum, itertools.izip(A, B))
Если вместо этого вы хотите сделать вид, что более короткий список заполнен нулями, использование itertools.izip_longest
- этократчайший ответ:
import itertools
AB = map(sum, itertools.izip_longest(A, B, fillvalue=0))
или
import itertools
AB = [a + b for a, b in itertools.izip_longest(A, B, fillvalue=0)]