列表、字符串、元组、集合、字典等的联系区别及使用方法以及解包在其中的使用 (1)列表篇

📅 2026/7/17 20:39:26 👁️ 阅读次数 📝 编程学习
列表、字符串、元组、集合、字典等的联系区别及使用方法以及解包在其中的使用 (1)列表篇

1.综合概念上的比较

列表

可变类型

可以储存不同类型的元素

元素有序(索引在其中有意义),可以重复,元素可以修改

元组

不可变类型

和列表类似,但是一旦定义完成,不可修改,只能进行查询操作

字符串

不可变类型

不可变性,有序性,可迭代性(可以使用循环语句将其中的元素输出

集合

可变类型

无序的(不可以使用索引访问),不可重复的,可以修改的(有自动去重功能

但是集合中的元素本身必须是不可变类型(如数字,字符串,元组)

字典

可变类型

key:value

键(key)不能重复,不能为可变类型,如列表、集合、字典等;如果键重复,后面自动覆盖前面的值

值(value)可以是任何类型的数据

可变类型和不可变类型的区别;

可变类型(如列表、集合、字典):改内容,地址不变(如下图,最后输出的地址是一样的)

不可变类型(如元组、字符串):改内容,地址必变(如下图,最后输出的地址不一样)

可以使用type()来查看数据类型

2.每一种的详细用法以及案例说明

(1)列表(list)

用方括号括起,形如[ ],比如[1,'a',3.14,True,5]就是一个列表(这里的字母需要加引号,不然电脑认为其为变量会报错)(True和False属于布尔类型)

附加:索引的基本概念

1'a'3.14True5
正向索引01234
逆向索引-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个元素,带*的永远是列表

如下图所示

仅代表个人观点,欢迎友善批评指正