Python——第二章:集合 Set

set集合,集合的特点是无序的 

写法:s = {1,2,3}

但是如果内容是空的,它不是set集合,而是dict字典

s = {}
print(type(s))

#输出结果
<class 'dict'>
{}

集合是无序的,每次输出结果都不尽相同

s = {3,2,1}
print(type(s))
print(s)

#输出结果
<class 'set'>
{1, 2, 3}

集合是不能重复的,即使你这样做或者add,也是没有实际意义的

s = {3,2,3}
print(type(s))
print(s)

#输出结果
<class 'set'>
{2, 3}

python中的set集合进行数据存储的时候,需要对数据进行哈希计算。根据计算出来的哈希值进行存储数据。

set集合要求存储的数据必须是可以进行哈希计算的。

可哈希【hash】:以下类型的值,是不可变的数据类型:intstrtuplebool,可以作为集合内的元素

s = {1,"呵呵哒",2,3}
print(type(s))
print(s)

#输出结果
<class 'set'>
{2, 1, '呵呵哒', 3}

不可哈希【unhashable】:以下类型的值,是可变的数据类型:listdictset,不可以作为集合内的元素

s = {1, 2, 3, "呵呵", (1, 2, 3), []}  # TypeError:unhashable type: 'list'
print(s)

正确的创建空集合的方法:

s = set()  # 创建空集合
t = tuple()# 创建空元组
l = list() # 创建空列表
s = str()  # 创建空字符串

举例:

s = set()  # 创建空集合

s.add("赵本山")
s.add("范伟")
s.add("麻花藤")
print(s)

#输出结果,乱序
{'麻花藤', '范伟', '赵本山'}

s.remove("范伟")
print(s)

s.pop()  # 删除最后一个
print(s)
#由于集合无序,输出也是乱序的,测试的时候每次结果都不一样,也无法验证是删除了最后一个。

想要修改集合内的元素,可以先删除,再新增。

s.remove("麻花藤")
s.add("沈腾")
print(s)

#输出结果
{'赵本山', '沈腾', '范伟'}

 想要查询,只能通过for循环来依次查询每一个元素

for item in s:
    print(item)

#输出结果
赵本山
沈腾
范伟

交集, 并集, 差集 

s1 = {"刘能", "赵四", "皮长山"}
s2 = {"刘科长", "冯乡长", "皮长山"}

print(s1 & s2)  # 交集
print(s1.intersection(s2))
#输出结果
{'皮长山'}

print(s1 | s2)  # 并集
print(s1.union(s2))
#输出结果
{'皮长山', '刘能', '赵四', '冯乡长', '刘科长'}

print(s1 - s2)  # 差集(S1里有S2里没有的)
print(s1.difference(s2))
#输出结果
{'刘能', '赵四'}

集合是不能重复的

#重要的作用: 可以去除重复
s1 = {"周杰伦", "昆凌", "蔡依林", "侯佩岑"}
print(s1)
s1.add("周杰伦")
print(s1)

#输出结果
{'昆凌', '蔡依林', '周杰伦', '侯佩岑'}

我们利用这种特性,可以对列表里的元素进行去重。

lst = ["周杰伦", "昆凌", "蔡依林", "侯佩岑", "周杰伦", "昆凌", "蔡依林", "侯佩岑", "周杰伦", "昆凌", "蔡依林", "侯佩岑"]
print(lst)
print(list(set(lst)))   # 去除重复之后的数据是无序的.

操作的方式是先进行set变成集合,再进行list操作,变成列表。但是这里的顺序是无序的,不唯一。

输出结果:

['周杰伦', '昆凌', '蔡依林', '侯佩岑', '周杰伦', '昆凌', '蔡依林', '侯佩岑', '周杰伦', '昆凌', '蔡依林', '侯佩岑']
['昆凌', '蔡依林', '周杰伦', '侯佩岑']

 

posted @ 2023-10-30 17:59  Magiclala  阅读(20)  评论(0编辑  收藏  举报