Python小白基础(3)- 数据类型2(非序列)

1,284 阅读5分钟

前情提要:

上一篇文章我简要讲了数据类型中的数字和序列(包含字符串、列表和元组),没看的童鞋可以直接传送门直达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'>

这里继续插播一个知识点:成员关系符innot 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'])
# 结果输出:
'小码农'

另外在提及字典的两个BIFkeys()values()

keys():返回字典内所有的键名

values():返回字典内所有的键值

dict1.keys()
# 结果输出:
dict_keys(['handsome', 'beauty'])

dict1.values()
# 结果输出:
dict_values(['小码农', '童鞋们'])

小结

本篇文章,简单介绍了无序容器(包括集合和字典)。结合了前一篇,对python的数据类型小白总结暂告一段落。文章内容是小码农结合自身学习经验和网上的内容整理而来,如有错误,还望指出。共勉~