前情提要:
上一篇文章我简要讲了数据类型中的数字和序列(包含字符串、列表和元组),没看的童鞋可以直接传送门直达Python小白基础(2)- 数据类型1(Number、序列)。
那么序列讲了,有童鞋就说了,之前列举除了6中标准数据类型,也直降了4个呀,既然有序列(Sequence),那剩下的应该就不是序列了吧。姑且我们暂时吧这些不是序列的容器叫做无序容器吧。
附:Python有六个标准的数据类型:
- Numbers(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
无序容器
无序无序,和有序对应,那么也就是说,有序容器那些根据下标来访问元素的方法在无序容器中是行不通滴。无序嘛,就是没套路,看心情。在6个标准类型中,
集合(Set)和字典(Dictionary)就属于无序容器。善于动脑袋的同学又会发现一个问题,那无序容器中没办法按下标来访问对象中的元素,那我们要怎么访问?
好问题,本篇文章,就会就
集合和字典这俩玩意展开,当然也包括如何访问元素了。

Set(集合)
集合,看名字就可以联想到,很多东西放在一个对象中,集合在一起,emm,差不多就是这个意思。看过前面文章的童鞋又双叒叕有问题了,那这不是和那个包罗万象的列表一样了吗?
小码农告诉你,还是有区别滴。集合里边不能有重复的元素,而列表可以有。也就是说:
# 定义列表
list1 = [1,2,3,1,2,3]
# 结果输出:
[1,2,3,1,2,3]
# 定义集合
set1 = {1,2,3,1,2,3}
# 结果输出:
{1,2,3}
看到吧,自动把重复的元素给去掉了,这种特性,在某种情况下是很方便的哟,比如说把一个列表的重复元素去重。继续用上边的栗子:
list2 = list(set(list1)
# 输出结果:
[1,2,3]
上边的代码中,可以看到2个BIF,一个是list(),一个是set()。list()是将一个对象强制转换成列表,同理,set()是将一个对象强制转换成集合,同时set()也可以用来创建一个集合的。
但是有一点需要注意:
可以使用大括号{ }或者 set()函数创建集合,而创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。像这样:
# 定义一个空集合
set1 = set()
print(type(set1))
# 输出结果:
<class 'set'>
这里继续插播一个知识点:成员关系符 (in和not in)
成员关系符,用来判断某个元素是否是指定对象的成员元素。用在集合中就是这样:
set1 = ['LiMing','XiaoHua','Darkchan']
if 'Darkchan' in set1:
print('Darkchan在集合中哦')
else:
print('Darkchan不在集合中哦')
# 结果输出:
'Darkchan在集合中哦'
以上代码运用了一个最基础的逻辑分支if...else...(如果怎么样,否则怎样),显而易见,用成员关系符in来判断了Darkchan是不是在集合set1中。
另外,联想高中数学那种集合的交集啊、并集啊、差集啊,python也提供了对应的实现方式:
set1 = set('abcdefg')
set2 = set('efghijk')
# 交集 a & b,返回a和b中的公有元素组成的集合
print(set1 & set2)
# 结果输出:
{'g', 'e', 'f'}
# 并集 a | b, 返回两个集合的所有元素的集合
print(a | b)
# 结果输出:
{'g', 'b', 'f', 'i', 'e', 'h', 'k', 'd', 'c', 'j', 'a'}
# 差集,a - b,返回a中有但b中没有的元素集合
print(set1 - set2)
# 结果输出:
{'a','b','c','d'}
# 另外还有一种 a ^ b 操作,返回两个集合中不同时存在的元素的集合
print(a ^ b)
# 结果输出:
{'b', 'i', 'h', 'k', 'd', 'c', 'j', 'a'}
上边这段代码,童鞋们也可以自行尝试,不过输出结果和我的不一定相同,因为:集合是一个无序容器,不一样,正好验证了这一点,毕竟不按套路出牌嘛。
Dictionary(字典)
字面理解,字典这东西,大家都知道,学中文或者英文的时候,有不记得的字或者单词,字典翻一翻,找一找,就找到了。还记得当年查字典的你,是这么查的吗?
比如说有个字,你大概知道这么写,然后知道他念什么,那个字是shuai,第四声。然后你翻字典的时候,就会去找,声母是sh,然后接着找uai,然后在找到第四声,最后定位到那个字,嗯,正如小码农一般,一个帅字了得。
那么python中,引申过来的字典,差不多,不过是以一个键值对(key:value)的形式作为字典中的元素进行保存的。举个栗子:
# 定义一个空字典,此处重提一下定义空集合要用set()来创建而不是{}
dict1 = {}
dict1['handsome'] = '小码农'
dict1['beauty'] = '童鞋们'
print(dict1)
# 结果输出:
{'handsome': '小码农', 'beauty': '童鞋们'}
这里要注意字典和集合的区别,虽然都是花括号{},但是注意观察内部,就是不同的结构。以键值对形式存在的,就是字典,否则,就是一个集合。
代码中也可以看出,英俊的(handsome),就是小码农了,那么美丽的(beauty),就是童鞋们了~
然后我们要访问字典的话,就直接以键名的形式,就可以访问到指定的值了,值得一提的是: 在同一个字典中,键(key)必须是唯一的。
print(dict1['handsome'])
# 结果输出:
'小码农'
另外在提及字典的两个BIF: keys()和values()
keys():返回字典内所有的键名
values():返回字典内所有的键值
dict1.keys()
# 结果输出:
dict_keys(['handsome', 'beauty'])
dict1.values()
# 结果输出:
dict_values(['小码农', '童鞋们'])
小结
本篇文章,简单介绍了无序容器(包括集合和字典)。结合了前一篇,对python的数据类型小白总结暂告一段落。文章内容是小码农结合自身学习经验和网上的内容整理而来,如有错误,还望指出。共勉~