我来自R背景,现在正在尝试学习Python。目前,我正在研究如何在Python中进行一些我用来做R的计算。例如,得到总和
在R中,我可以做类似的事情x <- 1:2015
dat <- rep(NA, times = 2015)
for (i in x){
dat[i] <- floor(sqrt(i) / 10)
}
dat
sum(dat)
或
dat <- sapply(x, function(i) floor(sqrt(i) / 10))
sum(dat)
给出正确答案5064。
但是,Python中的以下代码给了我5060.0。
import pandas as pd
import numpy as np
sum(np.floor(np.sqrt(range(1,2015)) / 10))
我做错了什么?
编辑:正如Gregor所建议的那样,R代码可以更好地写成sum(floor(sqrt(x) / 10))
。
答案 0 :(得分:2)
在python中,range(a,b)
生成器提供了从a
到b-1
的可迭代,如文档中所述。为了得到这样的总和,你需要一个range(1, 2016)
答案 1 :(得分:1)
sum(np.floor(np.sqrt(range(1,2016)) / 10))
因为range
功能。然后不包括最后一个值。因此,2016
不是2015
答案 2 :(得分:0)
你的问题是范围(1,2015)仅包括1到2014年的整数。你应该使用范围(1,2016)
但是你不需要pandas和numpy这样做:如果时间优化不是问题,list comprehension是一种处理基本操作的更加pythonic方式:
import math
myrange=range(1,2016)
result=sum([int(math.sqrt(k)/10) for k in myrange])