《利用python进行数据分析》第三章range介绍时,有这么一个例子:
可以使用list来存储range在其他数据结构中生成的所有整数,默认的迭代器形式通常是你想要的。下面的代码对0到99999中3或5的倍数求和:
sum = 0 for i in range(100000): # % is the modulo operator if i % 3 == 0 or i % 5 == 0: sum += i
结果:2333316668
虽然range可以产生任意大的数,但任意时刻耗用的内存却很小。
我用的另一种方法,过程有点曲折(还是思考不到位),在这记录一下,首先上代码
正确版:
a=0
b=0
v=0
for i in range(0,100000,1):
if i*3<=99999 and i*3 % 5 != 0:
a = i*3
v = v+a
if i*5<=99999:
b = i*5
v= v+b
print(v)
结果:2333316668
错误版:
a=0
b=0
v=0
for i in range(0,100000,1):
if i*3<=99999:
a = i*3
v = v+a
if i*5<=99999:
b = i*5
v= v+b
print(v)
错误版没有将重复数据剔除
例如:计算0到20中3或5的倍数求和
正确的应该是:
3+5+6+9+10+12+15+18=78
而错误版计算的是:
(3+6+9+12+15+18)+(5+10+15)=93,
“15”计算了两次,唉,还是不够严谨,记录一下。