一行中列表中的平方和?

Ale*_*Wei 12 python sum list

为了证明我做了某事.这是我的代码总和三行.

l=[1,2,3,4,5];
sum=0

for i in l:
    sum+=i*i;
print sum
Run Code Online (Sandbox Code Playgroud)

我很好奇,我可以只用一行吗?

Hac*_*lic 20

是的你可以.这里使用的sum功能是:

l = [1,2,3,4,5]
print(sum(i*i for i in l))
Run Code Online (Sandbox Code Playgroud)

  • 为什么要投票?,请在进行投票时,请评论原因以便我们纠正. (4认同)

小智 13

关于什么 :

sum(map(lambda x:x*x,l))
Run Code Online (Sandbox Code Playgroud)

我们还使用reduce:

print reduce(lambda x,y: x+y*y,l) # as pointed by @espang reduce(lambda x,y: x+y*y,l) is only ok, when the first value is 1 (because 1*1 == 1). The first value is not squared
Run Code Online (Sandbox Code Playgroud)

我们可以取第一个元素,得到它的方块,然后将它添加到列表的头部,这样我们就可以确保它的平方.然后我们继续使用reduce.由于我们有更好的选择,所以这项工作并不值得.

reduce(lambda x,y: x+y*y,[l[:1][0]**2]+l[1:])
Run Code Online (Sandbox Code Playgroud)

出于好奇,我试图比较三种解决方案,以求出10000生成的数字的平方range,并计算每个操作的执行时间.

l=range(10000) 
from datetime import datetime
start_time = datetime.now()
print reduce(lambda x,y: x+y*y,l)
print('using Reduce numbers: {}'.format(datetime.now() - start_time))

from datetime import datetime
start_time = datetime.now()
print sum(map(lambda x:x*x,l))
print('Sum after map square operation: {}'.format(datetime.now() - start_time))

from datetime import datetime
start_time = datetime.now()
print sum( i*i for i in l)
print('using list comprehension to sum: {}'.format(datetime.now() - start_time))
Run Code Online (Sandbox Code Playgroud)

输出:

使用list comprehension速度更快

333283335000
using Reduce numbers: 0:00:00.003371
333283335000
Sum after map square operation: 0:00:00.002044
333283335000
using list comprehension to sum: 0:00:00.000916
Run Code Online (Sandbox Code Playgroud)

  • 当第一个值为1时,reduce(lambda x,y:x + y * y,l)才可以(因为1 * 1 == 1)。第一个值不平方 (2认同)

esp*_*ang 9

对于更大的列表和性能问题,你应该使用numpy:

import numpy as np
l = [1,2,3,4,5]
arr = np.array(l)

np.sum(arr**2)
# or better:
np.dot(arr, arr)
Run Code Online (Sandbox Code Playgroud)

  • @baxx我将 sum(i*i for i in range(15)) 与 a=np.arange(15), np.dot(a,a) 进行了比较。这是一个平局(即使添加了将 numpy 包含为 np!任何大于 15 的数字的时间,并且 numpy 更快。 (2认同)