——列表——
现在呢,我们有这样一个问题,需要存储“安琪拉“、“妲己”、”貂蝉”、“王昭君”四个人的名字,“anqila”、“daji”、“diaochan”、“ wangzhaojun”。若是存为字符串的格式,names = "anqila daji diaochan wangzhaojun" (可以用空格隔开,也可以用逗号隔开)。若想取出其中的某一个名字,或者是修改其中的某一个名字,操作都极为不方便。
所以,为了解决这个问题,就定义了“列表”这样的数据类型。当需要存储的数据量较大时,就需要用列表来存储数据。
列表的基本格式为:names = [ ]

----------------------查----------------------
若是想取出某个名字,直接输入其角标即可,从左往右从0开始计数。
例如想取出“diaochan”这个名字。“diaochan”的下角标为2。

假设想要取最后一个数据,如果知道这个列表的长度,假定例子中的4个名字,则可以直接print(name[3]),就把“wangzhaojun”取出来了。

要是不知道这个列表的长度,该怎么办呢?方法如下:

print(names[-1])说明要是从右边开始计数,就是从-1开始,从右往左依次为:-1,-2,-3,……
要是想一次性取出连续的“daji”和“diaochan”这两个名字。方法如下:

为什么是names[1:3]而不是names[1:2]呢?
这种方法可以简记为“顾头不顾尾”,names[x:y]从角标为x的位置开始取数据,一直到y,但却不包括角标为y的数据。这种方法称为“切片”。
考虑,要是从右往左,想取最后两个数据,是否应该是print(names[-1:-3]) ? 验证一下。

可以看到,没有取到任何数据。
原因是切片这个操作,顺序只能是从左往右,不存在从右往左这种情况。
那么我们接着考虑若是调换一下顺序呢?

可以看到,考虑到“顾头不顾尾”的原则,取出的是-3和-2位置的数据,也就是“daji”和“diaochan”。我们接着想到,应该是从-2开始,那么结束位置若是-1,则取出的数据会只有“diaochan”,不包含最后一个数据“wangzhaojun”,那又应该怎么解决?
解决办法是:若是要取到最后一个位置,则结束位置空着。如下:

同样的,要是想从开头位置开始取,则也是起始位置空着。例如:想取前三个数据。

与print(names[0:3])的效果是一样的。(“顾头不顾尾”)

----------------------增----------------------
如果我想在列表的后面继续追加一个名字小乔,“xiaoqiao”,那应该怎么办呢?
在列表的后面继续追加,所用的函数为: .append()

若是我不想在列表的后面追加,而是在任意位置插入值呢?
所用的函数为: .insert() ,其格式为: .insert(想要待在的位置,插入的内容)。
假设我想在貂蝉的前面添加上大乔,“daqiao”。则程序如下:

这样就将“daqiao”这个内容插入在了“diaochan”的前面,也就是待在了names[2]的位置。
另外,只能一个值一个值的插入,不能批量插入。
----------------------改----------------------
改的操作很简单,直接在相应的位置,给它赋上新的值即可。
格式为:列表名[位置]=“赋的新值”
例如:我想把“diaochan”改成“lvbu”。

----------------------删----------------------
举例:想把列表中的“anqila”删掉。
①用函数 .remove()
格式为:列表名.remove(“删除的内容”)。

② 用del 列表名[位置]。

③用函数 .pop()
我们先看一下函数 .pop()的源代码:

意思是:在索引中移除和返回项,如果括号里面什么也没有,则默认为最后一项。
如果我们要删除“anqila”,则应该是names.pop(0)。

如果.pop()括号里面没有标明位置,则默认删除的是最后一项。

----------------------查询位置----------------------
现在考虑这样一个问题,若是我想知道“daji”这个名字在列表中的位置,应该怎么操作?
所用函数为: .index("内容")。

这样就可以将所查找内容的位置找了出来,若是同时想把内容也取出来:

----------------------查询出现次数----------------------
考虑这样一种情况:列表里可能存在多个重复的名字,那么如何统计这个列表里某个名字重复了几次?
所用到的函数为:.count("内容")
例如:在names = ["daji","anqila","daji","diaochan","daji","wangzhaojun","daji"]这个列表里,我想知道names里面有几个“daji”。

----------------------清空----------------------
所用函数: .clear()

----------------------反转----------------------
所用函数: .reverse()

----------------------排序----------------------
所用函数: .sort()
我们对names = ["chengyaojin","wangzhaojun","anqila","houyi","daji"]进行排序。

可以看出来,排序的顺序为:按照首字母的顺序。
再更改一下列表names:

可以看出来顺序为:特殊字符>数字>大写字母>小写字母,是按照ASCII码的顺序来进行排序的。
----------------------扩展----------------------
所用函数为: .extend(要合并的列表名)
举例:现有另外一个列表names1,想把names1并到names里。

可以看到,names1是依然存在的,那么我要是想删掉这个列表names1 呢?
所用语句为:del names1

这样names1就不存在了。
网友评论