我发现Python学习系列异常受欢迎,才挂到blog上几天,就已经碾压了我之前的文章
所以一不做二不休,继续我们的Python之旅吧~
当然我不能保证C先生不会搞什么幺蛾子,让我再去帮他做什么题/捂脸痛哭
(不过接下来的一段时间内,ta应该会沉迷钢4无法自拔,留下我不知所措被水淹没)
在C++中,数组的一般定义是什么?
若干个同类型的变量组成的有序(区别于堆)序列
也就是说,在我们的潜意识中,数组内变量的类型一定是相同的
但是Py的变量是缺省类型定义的,这就引发了一个疑问:Py中能支持普遍意义上的合法数组吗?
Py不愧是优美而强大的语言
ta不仅支持普遍意义上的数组,甚至还可以支持混合类型的“数组”(我们给ta们一个新名字:列表),没见过世面的C_T表示无比震惊!
那我们就从头开始吧——
创建列表
创建一个普通列表
创建一个混合列表
创建一个空列表
演示科目开始:
可以发现,只要把你想放的东西塞到中括号里,一个列表就创建好啦
如果什么都不放,那么得到的就是一个空列表
修改列表
当然,目前为止我们得到的都是固定列表,如果我们想要把新元素插入列表中那要怎么办呢?
向列表添加单个元素
这是列表的内置函数,需要通过后置 " . " 来调用
append只支持插入单个元素
但是单个插入的效率比较低,我们考虑有没有能够一次性插入多个元素的函数
扩展列表
这个函数可以扩展列表
但是括号内不能简单的堆叠插入元素,而要写成列表的形式
以上的操作只能在列表的最后插入元素
如果我们需要在特殊位置插入元素,就需要新姿势:
在列表中的特殊位置插入单个元素
用法很简单啦(注意列表下标从0开始):
获取单个列表元素
跟C++中的数组一样,我们可以通过元素的索引值从列表中获取单个元素
列表分片
利用索引值我们可以快速准确的访问列表中的单个元素
但是如果我们得寸进尺,希望一次性获取多个元素要怎么办呢?
我打算还是先演示一下:
- 在列表名后
[a:b]
可以截取列表的一部分,其中a和b都可以省略[a:b]
表示截取从列表下标 到 的一部分[a:0]
表示截取从列表下标 到列表末尾的一部分[0:b]
表示截取从列表开头到列表下标 的一部分[:]
表示截取原列表本身,这就给我们提供了一个思路,可以快速复制列表- 看下面这段代码:
可以发现,列表直接进行=
操作相当于为原列表增加了一个别名,同呼吸共命运
只有使用[:]
才可以实现无联系的复制列表
删除列表元素
这里我会介绍三个用来删除的操作:
这是列表的内置函数,需要通过后置 " . " 来调用
但是括号中需要写准确的元素才能成功
del可以用来删除单个元素,甚至删除整个列表
这是列表的内置函数,需要通过后置 " . " 来调用
括号中写需要删除的元素的下标,若缺省就默认为末尾元素
列表的一些常用操作符
- 比较操作符
- 逻辑操作符
- 连接操作符
- 重复操作符
- 成员关系操作符
先看一下实验结果吧:
- 列表的大小比较从第一个元素的开始,一旦比较出大小关系就停止(类似字符串的大小比较)
- 列表支持逻辑运算
- 列表支持加法操作,但是不要妄想用这种方法代替扩展列表的正规方法,因为加法要求两边的列表类型完全一致,所以一般情况下还是使用append,extend,insert完成列表的修改
- 列表支持乘法操作,表示列表的重复
- 可以利用
in
和not in
判断某元素是否在列表内- 列表元素为列表,其中的元素获取方法类似二维数组的元素获取方式
列表的内置函数
输入dir(list)
领取列表的内置函数
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
下面就选择一些常用的内置函数进行简单介绍:
内置函数 | 函数调用形式 | 用途 |
---|---|---|
统计元素在列表中的出现次数 | ||
下标从 到 的区间内,元素出现的第一个位置坐标 | ||
翻转列表 | ||
从小到大排列列表元素 | ||
从大到小排列列表元素 |
元组
前辈对于元组的描述是:戴上了枷锁的列表
由于元组和列表是近亲关系,所以元组和列表在实际使用上是非常相似的
所以接下来我们主要讨论元组和列表到底有什么不同
元组和列表最大的区别就是:
列表非常灵活,支持插入删除等操作
而元组相比较而言就笨拙一点,不支持插入删除操作,是不可改变的
创建和访问元组
我们使用中括号创建列表,
相对的,一般情况下,我们使用小括号创建元组
在不涉及修改元组的情况下,对列表适用的操作对元组也适用
我们知道(假设我们都知道),列表的关键特征是中括号
那么元组的基本特征是小括号吗?
很遗憾,并不是。。。
元组的关键特征实际上是那个你一直都没有留意实际上意义非凡的逗号
如果想要定义单个元素的元组,在括号里只写一个元素是不能成功的
必须在元素后面添加一个逗号,计算机才会将其创建为元组(甚至省略括号也可以成功)
空元组的创建就是一对小括号
Last,仔细观察演示科目中的最后两条命令
我们可以发现,出现了逗号之后
*
就不再是数乘,而代表元组的重复叠加,最后生成一个包含八个8的元组
更新和删除元组
不是说元组是不能改变的吗,为什么还能支持更新呢?
因为曾经有一群智慧的前辈,ta们发现元组支持分片操作,于是就利用拼接和分片实现了元组的更新
我们可以看到,可以使用del语句删除元组
但是一般情况下我们没有必要单独进行删除操作
因为Py的编译器会随时对变量,列表,元组等等进行检查
当被赋予全新的值之后,原来的值就会直接作废
所以在Py中删除操作通常被省略,而是采取直接赋值的方法