Python的集合(set)类型、None类型.....

Day07 数据类型(下)

1.集合(set)

集合是一个无序、可变、不允许重复的容器

1.1 集合的定义

v = {1,2,3,"GG"}
  • 无序,无法通过索引获取元素值
  • 可变,可以添加和删除元素
v1 = {1,2,3,5}
v1.add(6)
print(v1)
#{1, 2, 3, 5, 6}
  • 不允许数据重复
v1 = {1,2,3,5}
v1.add(2)
print(v1)
#{1, 2, 3, 5}

一般什么时候用集合呢?

就是想要维护一大堆不重复的数据时,就可以用它。比如:做爬虫去网上找图片的链接,为了避免链接重复,可以选择用集合去存储链接地址。

  • 定义空集合时,只能使用v = set(),不能使用v={}(这样是定义一个空字典)

1.2 独有功能

1.2.1 添加

v1 = {1,2,3,5}
v1.add(2)
print(v1)
#{1, 2, 3, 5, 6}
data = set()
data.add("aa")
data.add(1)
data.add(456)
print(data)

#{456, 1, 'aa'}

1.2.2 删除

data = {"aa",456,1,"BB"}
data.remove("aa")
data.discard("BB")
print(data)

#{456, 1}

1.2.3 交集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 & d2  #取交集,方式一
d4 = d1.intersection(d2)#取交集,方式二
print(d3)

#{'BB', 'DD', 'GG'}

1.2.4 并集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 | d2#取并集,方式一
d4 = d1.union(d2) #取并集,方式二
print(d3)
#{'GG', 'BB', 'HH', 'CC', 'FF', 'DD', 'AA'}

1.2.5 差集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 - d2#d1中有d2中没有,方式一
print(d3)
{'CC', 'AA'}
d4 = d1.difference(d2)#d1中有d2中没有,方式二
print(d4)
{'CC', 'AA'}
d5 = d2 - d1#d2中有d1中没有,方式一
print(d5)
{'FF', 'HH'}
d6 = d2.difference(d1)#d2中有d1中没有,方式二
print(d6)
{'FF', 'HH'}

1.3 公共功能

1.3.1 减,计算差集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 - d2
d4 = d2 - d1
print(d3)
#{'CC', 'AA'}
#{'HH', 'FF'}

1.3.2 &,计算交集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 & d2 

1.3.3 |,计算并集

d1 = {"AA","BB","CC","DD","GG"}
d2 = {"BB","DD","GG","FF","HH"}

d3 = d1 | d2

1.3.4 长度

d1 = {"AA","BB","CC","DD","GG"}
print(len(d1))

1.3.5 for 循环

d1 = {"AA","BB","CC","DD","GG"}

for item in d1:
    print(item)

#AA
#BB
#GG
#DD
#CC

1.4 转换

  • 其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据有重复自动剔除。
  • int/list/tuple/dict都可以转换为集合类型。
v = "AA"
v1 = set(v)
print(v1)
v = [11,22,33,44,55,66]

v1 = set(v)
  • 集合也是去重的一个有效手段

1.5 其他

1.5.1 集合的存储原理

在这里插入图片描述

1.5.2 元素必须可哈希

  • 集合的元素必须是可哈希的值,内部通过通过哈希函数把值转换成一个数字。

  • 目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的。

  • 转换成功

v = [11,22,33,44,55,66]

v1 = set(v)
  • 转换失败
li = [1,2,3,4,[1,2,3],44]

li1 = set(li)

#TypeError: unhashable type: 'list'

1.5.3 查找速度特别快

因存储原理特殊,集合的查找效率非常高(数据量大了才明显)

  • 效率低
user_list = ["AA", "BB", "GGBoy"]
if "BB" in user_list:
    print("在")
else:
    print("不在")

user_tuple = ("AA", "BB", "GGBoy")
if "GGBoy" in user_tuple:
    print("在")
else:
    print("不在")
  • 效率高
user_list = {"AA", "BB", "GGBoy"}
if "BB" in user_list:
    print("在")
else:
    print("不在")

1.5.4 对比和嵌套

类型是否可变是否有序元素要求是否可哈希转换定义空
listlist()v = []或v = list()
tupletuple()v = () 或 v = tuple()
set可哈希set()v = set()

练习题

1. 写代码实现

# 循环提示用户输入,如果输入值在v1中存在,则追加到v2中,如果v1中不存在,则添加到v1中。(如果输入x或n则停止循环)
v1 = {'AA', 'BB', 'CC'}
v2 = []

while True:
    name = input("请输入姓名:")
    if name in v1:
        v2.append(name)
    elif name.upper() == "N":

        print(v1)
        print(v2)
        print("ending")
        break
    else:
        v1.add(name)

2.下面哪些值不能做集合的元素


[11,22,33]#不能
[]#不能
(123)
(1,2,3)#不能

3.模拟用户信息录入程序,已录入则不再创建。

user_info_set = set()
while True:
    name = input("请输入姓名:")
    age = input("请输入年龄:")
    item = (name, age,)
    if item in user_info_set:
        print("该用户已录入")
    else:
        user_info_set.add(item)

4.给列表去重

v1 = [11,22,33,4,55,11,22,55,5,4]
v2 = set(v1)
print(v2)
#{33, 4, 5, 11, 22, 55}

None 类型

Python的数据类型中有一个特殊的值None,意味着这个值啥都不是或表示空。相当于其他语言中 nu11作用一样。在一定程度上可以帮助我们去节省内存。例如:

v1 = None
v3 = []
v4 = []

v3 = [11,22,33,44]
v4 = [111,22,43]

目前所有转可以换为False布尔值的值有:

0
""
[] or list()
() or tuple()
set()
None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值