列表、字符串、元组、集合、字典等的联系区别及使用方法以及解包在其中的使用 (1)列表篇
1.综合概念上的比较
列表 (可变类型) | 可以储存不同类型的元素 元素有序(索引在其中有意义),可以重复,元素可以修改 |
元组 (不可变类型) | 和列表类似,但是一旦定义完成,不可修改,只能进行查询操作 |
字符串 (不可变类型) | 不可变性,有序性,可迭代性(可以使用循环语句将其中的元素输出) |
集合 (可变类型) | 无序的(不可以使用索引访问),不可重复的,可以修改的(有自动去重功能) 但是集合中的元素本身必须是不可变类型(如数字,字符串,元组) |
字典 (可变类型) key:value | 键(key)不能重复,不能为可变类型,如列表、集合、字典等;如果键重复,后面自动覆盖前面的值 值(value)可以是任何类型的数据 |
可变类型和不可变类型的区别;
可变类型(如列表、集合、字典):改内容,地址不变(如下图,最后输出的地址是一样的)
不可变类型(如元组、字符串):改内容,地址必变(如下图,最后输出的地址不一样)
可以使用type()来查看数据类型
2.每一种的详细用法以及案例说明
(1)列表(list)
用方括号括起,形如[ ],比如[1,'a',3.14,True,5]就是一个列表(这里的字母需要加引号,不然电脑认为其为变量会报错)(True和False属于布尔类型)
附加:索引的基本概念
| 1 | 'a' | 3.14 | True | 5 | |
| 正向索引 | 0 | 1 | 2 | 3 | 4 |
| 逆向索引 | -5 | -4 | -3 | -2 | -1 |
正向索引以左边第一个为索引0,逆向索引以右边第一个为索引-1
操作1:修改
使用列表名[索引]=新的值即可
比如t=[1,'a',3.14,True,5],现在要将3.14改为3.1415
因为3.14的正索引是2,逆向索引是-3,所以有这两种,其结果相同
如果索引不存在会直接报错
操作2:删除
使用del 列表名[索引]即可
比如上面的t=[1,'a',3.14,True,5],删除3.14
操作3:切片
主要结构:列表名【开始索引;结束索引;步长】
步长通常默认为1,实际上可正可负
最后切片出的索引采取前闭后开的原则
比如t=[1,'a',3.14,True,5],若s[1;3;1]则只包括索引1和索引2,索引3不取
t[1;3]是被允许的,此意是步长取默认步长1,但是第一个分号不能省略
操作4:几种主要的使用方法(t是列表名)
| apppend() | 在列表尾部添加元素 | t.append() |
| insert() | 在指定索引前插入该元素 | t.insert(索引,元素) |
| remove() | 移除列表中第一个匹配到的值 | t.remove() |
| pop() | 删除列表中指定索引位的元素(如果未指定,删最后一个) | t.pop() |
| sort() | 对列表进行排序(默认从小到大)(但是一定要类型一致) 如果有相同的元素,相对顺序得到保留 比如有两个a,一个索引2一个索引5,排序之后索引2的a还是排在前面 | t.sort() |
| sorted() | 相当于在原列表的基础上排序之后返回一个新列表,有返回值 | a=sorted(t) |
| reverse() | 反转列表元素 | t.reverse() |
很明显的是在上面的主要使用方法中,只有sorted最后使用方法是a=sorted(t),即只有它有返回值,其余的都是直接修改列表了
如果输入a=sort(t)是错误的,a没有返回值,赋值None
现在给出一些案例
(1)将用户输入的十个数字储存到一个列表中,并将列表数字进行排序,输出其中最小值
这里就最开始的排序给定两种方法以及分析
第一种是比较标准的,用的是在列表尾部添加元素的方式
第二种是不怎么标准的,因为其输出的列表的组成元素都是字符串,其比较的方法是ASCII码值比较法,所以不太规范,请注意,第二种里面写的a=a+num是基于两种都是同种类型的情况下才可以这么合并
最小值就是排序之后的零索引,所以直接print(a[0])即可得到最小值
(2)合并两个列表中的元素,并且对合并结果进行去重处理
a=['a',2,3,False,5,7,'b',3.14]
b=[2,3,True,'b',3.1415,8,6]
这两种逻辑是一样的,只有一个语句不同(一个是列表的合并,一个是列表的解包)
去重的逻辑:对于a中的每一个元素,如果它不在b里,就把它添加到新建的空列表d中,所以循环结束之后d里面都是a中有b中没有的元素,在最后的时候把d和b合并,就是去重的结果
组包和解包
现在讲讲里面涉及的解包和组包思想
解包:将列表这一类容器解开成一个个独立的元素
组包:把多个值合并到一个容器
例如s=[1,2,3]
a,b,c=s就是解包操作,相当于把右边拆开,里面的东西挨个分给左边的变量
*在解包里的作用是:打包剩余零散元素(当左边变量小于右边元素的时候)
举个例子:s=[1,2,3,4,5]
a,b,*c=s
其输出结果会是a=1,b=2,c=[3,4,5] 同时这里也要注意:没有*的变量直接拿值,有*的变量拿列表(元组里面也是一样的)
并且还有一点很重要的就是哪怕只剩下1个或者0个元素,带*的永远是列表
如下图所示
仅代表个人观点,欢迎友善批评指正