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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python