从机器学习学python(三)
——数组冒号取值与extend
(原创内容,转载请注明来源,谢谢)
一、数组冒号取值
1、小白级别
python的特有取值方式,假设数组a = [0,1,2,3,4],则:
b=a[:3]表示b取数组a第四个元素之前的元素,即b=[0,1,2]
c=a[:-1]则表示取a最后一个元素前面的所有元素,即c=[0,1,2,3]
原理是因为冒号前面带的可以省略掉。
2、困难级别
b=array(
[
[
[ 0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]
],
[
[12, 13, 14, 15],
[16, 17,18, 19],
[20, 21, 22, 23]
]
]
)
即,b是三维数组,每个维度上的元素个数分别是2、3、4,在不用冒号取值的情况下,b[0][0][0]即表示第一个元素,b[0]表示取b数组第一个维度上的第一个数组元素。
当使用冒号取值,规则为:【第1维起点:终点:步长,第2维...,第3维】
取出整个b数组的写法为b[0:2:1,0:3:1, 0:4:1],拿第一维举例,0:2:1,表示对于第一维而言,取起点第1个元素(数组下标是)、终点第2个元素(终点下标是1)、步长是1(即每个元素都取,如果写2表示隔一个元素取一个元素)。另外可以看到,这里最后取到的值,是包含了起点的元素,但是不包含终点的元素。
3、大师级别
还是用上面的数组b。
1)步长为1可以省略,b[0:2:,0:3:, 0:4:]和上面的b[0:2:1, 0:3:1, 0:4:1]等效(注:当然和步长一起的冒号也可以省略,成如下格式b[0:2, 0:3, 0:4],为了便于理解我们还是先保留这个冒号)
2)终点为自然终点,可以省略,b[0::, 0::, 0::](注:可以省略成b[0:,0:,0:],不能省略成b[0,0,0])
3)起点为自然起点,可以省略,b[::,::,::](注:可以省略成b[:,:,:],不能省略成b[,,])
4、骨灰级
b[::,::,::],最右边的,如果都是省略形式,那么也可以省略,从右边开始省略,先是冒号省略b[::,::,],然后是逗号省略b[::,::],依次b[::,],b[::],b[:](注:不能省略成b[]),最后就是省略成b了。
如果右边不是简略形式,就不能省略,像b[::,::,::2]就不能省略成b[,,::2]
如果想成左边开始省略的,前面可以加...即b[..., ::2]
5、个人体会
这种东西,建议写的时候最好不要用省略,实在想用一定要写注释,不然过两天自己都不知道在写什么了。
写这个的主要目的在于,有的书上会涉及到省略形式。
二、extend与append
1.append()
向列表尾部追加一个新元素,列表只占一个索引位,在原有列表上增加
2.extend()
向列表尾部追加一个列表,将列表中的每个元素都追加进来,在原有列表上增加
3.+
直接用+号看上去与用extend()一样的效果,但是实际上是生成了一个新的列表,存这两个列表的和,只能用在两个列表相加上。(即需要写出C=A+B,单纯写式子A+B,则没有变量来保存结果)
4.+=
效果与extend()一样,向原列表追加一个新元素,在原有列表上增加。
综上,对于一个数组x,要把下标是index的元素(index在x的范围内)抽走,返回剩下的元素,可以如下方式:
y=x[:index]
y.extend(x[index+1:])
——written by linhxx 2018.01.06
领取专属 10元无门槛券
私享最新 技术干货