上午翻手机,看到一道python入职面试题,问:1-100的和是多少?
我还在想for循环的时候,瞄了一眼答案:
sum(range(1,101))
哇!python的代码就是这样惊人地简洁。我不禁对range函数刮目相看,顺便学习了一下range的丰富用法。
range函数的语法:
range(start, stop[, step])
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1),步长也可以设置为负数,例如:range(10,0,-1)
用法举例:
x="Distributed"
for i in range(len(x)):
print(x[i])
可见,range可以表示一个数字序列,数列之间的间隔最小是1。
那么,问题来了:
如果我想间隔0.1怎么办呢?例如定义a=range(1,6),显然,2 in a为True,2.5 in a则为False。如何把步长设置成小数呢?
带着这个问题,我搜索了一下,答案是使用numpy
numpy,即Numerical Python,翻译过来是:用数字表示的python,是python的一个第三方库。
我迫不及待地写了一个间隔为0.1的数字序列:
import numpy as nu
a=nu.arange(1,11,0.1)
for i in a:
print(i)
结果令人喜忧参半,如图:
1.1之后,并不是以0.1为稳定的步长增加序列的,这是什么原因呢?
经过搜索,发现numpy.arange()由于小数计算的进制转换等原因,无法解决这一问题,且不推荐用这个办法。同样的需求,可以用以下方法实现:
t1 = np.array([x*0.1 for x in range(1,100)])
print(t1)
可见,np.array([x*0.1 for x in range(1,100)])表示的是:
从0.1开始,每次加0.1,直到99次,直到9.9的数字序列。
那么,我们想表达从5.5开始,到10.5结束,步长为0.3的列表,怎么表示呢?
import numpy as np
a=int(5.5/0.3)
b=int((10.5-5.5)/0.3)
t1 = np.array(np.array([x*0.3 for x in range(a,a+b)]))
print(t1)
有点复杂了,数学不好的同学慢慢理解。
下面,顺便补充点numpy的用法:
1、存储和读取txt文件
import numpyas np
a = np.array([1, 2, 3, 4, 5])
np.savetxt('out.txt', a)
b = np.loadtxt('out.txt')
print(b)
2、构建多维数组:
import numpy as np
a = np.array([[1, 2], [3, 4]])
print(a[1,0])
网友评论