在列表理解的元组中进行计算
Doing calculation in Tuples on List Comprehension
我是列表理解的新手,我想用元组做点什么。所以这就是问题所在:
给定两个向量 l1
和 l2
,我希望将它们组合成元组。然后我想将它们相乘,然后再将它们相加。
例如,如果我有 l1 = [1,2,3]
和 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))
之前可以把元组加起来。但是现在我需要再做一次计算,我不知道如何开始。如果可以通过列表理解在一行中完成,那就太好了。有人有想法吗?
考虑:
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
我觉得你的计算有点不对,但你想要这个吗?
>>> 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
试试这个:
>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> sum([(i*j)+1 for (i, j) in zip(l1, l2)])
35
使用地图实现
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
我是列表理解的新手,我想用元组做点什么。所以这就是问题所在:
给定两个向量 l1
和 l2
,我希望将它们组合成元组。然后我想将它们相乘,然后再将它们相加。
例如,如果我有 l1 = [1,2,3]
和 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))
之前可以把元组加起来。但是现在我需要再做一次计算,我不知道如何开始。如果可以通过列表理解在一行中完成,那就太好了。有人有想法吗?
考虑:
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
我觉得你的计算有点不对,但你想要这个吗?
>>> 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
试试这个:
>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> sum([(i*j)+1 for (i, j) in zip(l1, l2)])
35
使用地图实现
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