从机器学习学python(三) ——数组冒号取值与extend

从机器学习学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]

原理是因为冒号前面带0的可以省略掉。

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]即表示第一个元素0,b[0]表示取b数组第一个维度上的第一个数组元素。

当使用冒号取值,规则为:【第1维起点:终点:步长,第2维 ...,第3维】

取出整个b数组的写法为b[0:2:1,0:3:1, 0:4:1],拿第一维举例,0:2:1,表示对于第一维而言,取起点第1个元素(数组下标是0)、终点第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

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-01-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法工程师

客官,来嘛,谷歌小菜请你尝尝!

作者:柳行刚 编辑:王抒伟 谷歌面试题 等你来挑战 详情往下看 各位,看招 1 题目描述: 一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重...

2978
来自专栏King_3的技术专栏

leetcode-80-删除排序数组中的重复项 II

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

1211
来自专栏武培轩的专栏

排序算法-插入排序

算法简介 插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应...

2654
来自专栏IT可乐

Java数据结构和算法(六)——前缀、中缀、后缀表达式

  前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆...

2179
来自专栏游戏开发那些事

【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识

  自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书...

893
来自专栏程序猿DD

第二章 正则表达式位置匹配攻略

第二章 正则表达式位置匹配攻略 正则表达式是匹配模式,要么匹配字符,要么匹配位置。请记住这句话。 然而大部分人学习正则时,对于匹配位置的重视程度没有那么高。 本...

19810
来自专栏noteless

[三]基础数据类型之Integer详解

1573
来自专栏老九学堂

【必读】C语言基础知识大全

C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。 例1:计算两个整数之和的c程...

4288
来自专栏Java爬坑系列

【JAVA零基础入门系列】Day10 Java中的数组

  什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去。   那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩...

1906
来自专栏从流域到海域

《笨办法学Python》 第19课手记

《笨办法学Python》 第19课手记 本节课讲函数和变量(变量和函数的关系是变量作为做函数的参数,定义时是形参,使用时是实参),内容比较简单。 源代码如下: ...

21910

扫码关注云+社区