七天入门Python(五)之集合、字典、列表及元组

Antvictor大约 6 分钟语言Python

大家好,我是Antvictor,励志要成为一名架构师的程序员。

在上一篇我们学习了运算符、逻辑运算符及条件判断。现在我们来学习一下列表、集合、字典及元组。

无论是列表、集合还是其他,他们只是不同的存储方式,但这些概念可以说是所有开发语言都有的,而且都比较重要,因为他们是程序中最主要的数据存储方式。

列表

序列是Python中最基本的数据结构,序列会为每元素分配一个数字--它的位置,也叫索引。第一个的索引为0,第二个的为1,以此类推,绝大多数语言的数据结构都是从0开始数的。

而列表便是Python序列的一个类型

Python中列表不会对数据类型有要求。

创建一个列表只需要用[]包裹起来,用","分割不同的数据,如下:

a = [1,2,"test",0.5]
b = [1,2,3,4,5]
c = ["test", 'hello', 'world']

查询

查询列表的值,需要使用索引来查询指定位置:

print(a[0]) # 1
print(a[1]) # 2

同时在python中有一些特殊的索引: 负的值,使用-x时,返回的便是列表倒数第x位的值, 以此类推:

print(a[-1]) # 返回倒数第一个:0.5
print(a[-2]) # 返回倒数第二个:test

上述方法,在不知道列表多长或需要返回后面几位的时候很好用,当然如果能知道列表的长度就更好了,那么有什么方法吗? 有,使用len(列表)可以直接查看列表的长度。

print(len(a)) # 4

添加、删除及修改列表中的元素

添加

将数据添加到队尾:

a.append("hello")
print(a) # [1,2,'test',0.5, 'hello']

将数据添加到指定的位置, 位置要使用索引:

a.insert(2, "world")
print(a) # [1, 2, 'world', 'test', 0.5, 'hello']

删除

使用del删除指定位置的元素:

del a[3]
print(a) # [1, 2, 'world', 0.5, 'hello']

使用pop查询指定位置的元素并删除,也叫推出:

print(a.pop()) # 推出最后一个位置上的值 hello
print(a.pop(2)) # 推出指定位置的值 world

使用remove根据值来进行删除, 如果有多个相同的值,需要多次删除:

为了方便测试,我们向列表a中再加一些相同的数据:

a.insert(2,"test")
a.append("test")
print(a) #[1, 2, 'test', 0.5, 'test']

现在我们开始删除:

a.remove("test")
print(a) # [1, 2, 0.5, 'test']
a.remove("test")
print(a) # [1, 2, 0.5]

元组

元组是什么呢?

元组是一个不可以变的列表,也就是说元组在创建后就不能再新增、删除、修改了。

元组使用()进行创建,代码如下:

tuple = (1,2,"2",0.2)
print(tuple)
print(tuple[2])
del tuple[2] # 报错

元组拥有和列表相同的特性,可以通过索引进行查询,可以存储不限类型的元素,唯独不可变。所以也就没有了新增、查询、删除等。

字典

什么是字典呢?

字典是一种key:value的数据结构,存储的是一个键值对

那么怎么使用呢?

字典使用`{"key":value}的形式来创建

maps = {'name':"Ant", 'age':25, 2:3}
print(maps) 

查询

查询的方式和列表的相同,也是使用变量名[],不过区别在于,字典查询时传的不再是索引,而是key

print(maps[name]) # Ant
print(maps[2]) # 3
print(maps[3]) # 报错

如代码中所示,查询没有的key时会报错,那么怎么避免呢?

使用get('key', msg)方法, 如果查询不到,则会返回msg。

print(maps.get(3, 4)) # 4

新增

使用变量名[key] = value的方式新增,需要注意的是:如果key已经在字典中了,那么使用这种方式就变成了修改,key是不能重复存在

maps['new'] = 'hello' 
print(maps) # {'name': 'Ant', 'age': 25, 2: 3, 'new': 'hello'}

maps[2] = 4
print(maps) # {'name': 'Ant', 'age': 25, 2: 4, 'new': 'hello'}

修改

修改如上所述,对已有的key进行重新赋值,便完成了修改。

删除

删除和列表一致,使用del进行删除,不再赘述。

集合

集合(Set)是一种列表形式的字典,使用的是字典的key的规则,即:不能重复。

Set也使用{},只是不再是键值对,而是和列表一样用,分割,并且Set是无序的,所以不能通过索引查询:

sets = {"1","sss",2,3,0.5}
print(sets) # {0.5, 2, 3, 'sss', '1'}

新增

使用add()update()可以进行新元素的添加,需要注意的是update不能传入数字, 而且会将字符串拆分,update还可以传入列表、元组、字典。 如果新增的内容是Set中已经有的,那么不会添加。

sets.add("1") 
print(sets) # {0.5, 2, 3, 'sss', '1'} 无新增

sets.add(22)
print(sets) # {0.5, 2, 3, 22, 'sss', '1'}

sets.add("123")
print(sets) # {0.5, 2, 3, 22, '123', 'sss', '1'}

sets.update("123")
print(sets) # {0.5, 2, 3, 'sss', 22, '1', '3', '123', '2'}

maps1 = {"test":"sets"}
sets.update(maps1)
print(sets) # {0.5, 2, 3, '3', 22, '1', 'sss', '123', 'test', '2'}

update传入字典的话,只会记录key

删除

使用集合时,是不能像列表那样通过索引或像字典一样通过key来查询的,使用集合只能通过将集合中的元素清除的方式获取,而清除的前提是知道了set中有什么值,所以set一般用来确认值是否在set中的。

那么我们可以通过哪些方法呢?

可以通过removepopdiscard方法进行删除,需要注意:remove删除没有的值时会报错,而discard则不会。

sets.remove("test")
print(sets)  # {0.5, 2, 3, '2', '3', 22, 'sss', '1', '123'}
print(sets.pop()) # 0.5
sets.discard("test")
print(sets) # {2, 3, '2', '3', 22, 'sss', '1', '123'}
sets.remove("test") # 报错

哦,用了全篇的del首次失去了宠爱,他无效了,真的如此吗? 其实del虽然不能删除元素了,但它可以掀桌子,直接删掉集合。

del sets
print(sets) # 报错

结语

本篇我们了解了Python中存储数据的结构:列表、元组、字典及集合,那么存起来不用怎么能行呢,那么将列表中存的数据全部获取呢?总不能一个个索引查询吧,那也太麻烦了。

下一篇我们便讲一下,什么是循环。看循环是如何将列表中的数据取出。

如果有表达有误的地方,欢迎评论区讨论,我会及时回复并修改有误的内容,感谢观看