我有两个清单:
A = [1, 2, 3, 4, 5]
B = [6, 7, 8, 9, 10]
我需要能够从两个列表中找到第n个术语的总和,即1 + 6,2 + 7,3 + 8等
有人可以告诉我如何同时参考两个列表中的项目吗?
我读到某个地方,我可以做Sum = a [i] + b [i],但我不相信它会如何起作用。
答案 0 :(得分:15)
>>> import operator
>>> map(operator.add, A, B)
[7, 9, 11, 13, 15]
只是为了展示Pythons的优雅: - )
答案 1 :(得分:13)
使用列表推导和zip
:
[a + b for (a,b) in zip(A,B)]
这些问题是作业吗?还是自学?
答案 2 :(得分:0)
如果你知道列表长度相同,你可以这样做:
AB = [A[i] + B[i] for i in range(len(A))]
在Python 2中,如果您的列表非常大,则可能需要使用xrange
而不是range
。我认为这是explicit, simple, readable, obvious way,但有些可能会有所不同。
如果列表的长度可能不同,则必须决定如何处理额外的元素。假设你想忽略任何列表更长的额外元素。这有三种方法:
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)]
答案 3 :(得分:0)
虽然Jazz的解决方案适用于2个列表,但如果您有2个以上的列表怎么办?这是一个解决方案:
def apply_elementwise_function(elements_in_iterables, function):
elementwise_function = lambda x, y: itertools.imap(function, itertools.izip(x, y))
return reduce(elementwise_function, elements_in_iterables)
a = b = c = [1, 2, 3]
>>> list(apply_elementwise_function([a, b, c], sum))
[3, 6, 9]
答案 4 :(得分:-1)
您好你也可以试试这个:
>>>a=[1,2,3,4,5]
>>>b=[6,7,8,9,10]
>>>c=[]
>>>for i in range(0,5):
c.append(a[i]+b[i])
>>> c
[7, 9, 11, 13, 15]