0

我是列表理解的新手,我想用元组做一些事情。所以这就是问题所在:

给定两个向量l1l2,我希望将它们组合成元组。然后我想在将它们全部相加之前将它们相乘。

因此,例如,如果我有l1 = [1,2,3]and l2 = [4,5,6],我想将它们与 zip 功能结合到[(1,4),(2,5),(3,6)].

在此之后,我想将元组相乘并加 1。会[(1*4)+1,(2*5)+1,(3*5)+1][4,11,16]

在那之后,我想总结一下4+11+16应该给出 31 的列表。

我以前学tuple(map(operator.add, a, b))过哪个可以加起来元组。但是因为现在我需要再做一次计算,所以我不知道如何开始。如果它可以用列表理解在一行中完成,那就太好了。有人有想法吗?

4

4 回答 4

3

考虑:

sum(a * b + 1 for a, b in zip(l1, l2))

看到:

>>> l1 = [1,2,3]; l2 = [4,5,6]
>>> sum(a * b + 1 for a, b in zip(l1, l2))
35
于 2016-01-18T03:05:59.470 回答
0

用地图实现

def f(xs, ys, k=1):
    """
    xs : first list
    ys : second list
    k  : sum constant -- problem case = 1
    """
    return sum(map(lambda x, y: x*y + k, xs, ys))

print f([1,2,3],[4,5,6], 1) == 35
于 2016-01-18T03:38:10.747 回答
0

我认为你的计算有点偏离,但你想要这个吗?

>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> l3 = zip(l1, l2)
>>> l3
[(1, 4), (2, 5), (3, 6)]
>>> l4 = [i*j for i, j in l3]
>>> l4
[4, 10, 18]
>>> l5 = [x+1 for x in l4]
>>> l5
[5, 11, 19]
>>> sum(l5)
35
于 2016-01-18T03:06:07.503 回答
0

尝试这个 :

>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> sum([(i*j)+1 for (i, j) in zip(l1, l2)])
35
于 2016-01-18T03:06:18.973 回答