轩小陌的Python笔记-day07 数据类型

day06 数据类型(下)

常见的数据类型:

  • int,整数类型(整型)
  • bool,布尔类型
  • str,字符串类型
  • list,列表类型
  • tuple,元组类型
  • dict,字典类型
  • set,集合类型
  • float,浮点类型(浮点型)

目标:掌握字典、集合、浮点类型相关知识。

课程概要:

  • set集合:一个不允许重复重复 & 可变类型(元素可哈希)。
  • dict字典:一个储存键值对的容器。
  • float类型:我们生活中常见的小数。

1.集合(set)

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

1.1 定义

v1 = {
    11, 22, 33, "alex" }
  • 无序,无法通过索引取值。

  • 可变,可以添加和删除元素。

    v1 = {
         11,22,33,44}
    v1.add(55)
    print(v1) 
    # 输出结果:{11,22,33,44,55}
    
  • 不允许数据重复。

    v1 = {
         11,22,33,44}
    v1.add(22)
    print(v1) 
    # 输出结果:{11,22,33,44}
    

一般什么时候用集合呢?

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

注意:定义空集合时,只能使用v = set(),不能使用 v={}

# 定义一个空列表:
v1 = []
v11 = list()
# 定义一个空元组:
v2 = ()
v22 = tuple()
# 定义一个空集合:
v3 = set()
# 定义一个空字典:
v4 = {
   } 
v44 = dict()

1.2 独有功能

1.2.1 add() 添加元素
data = {
   "刘嘉玲", '关之琳', "王祖贤"}
data.add("郑裕玲")
print(data)
# 输出结果:
{
   "刘嘉玲", '关之琳', "王祖贤","郑裕玲"}
data = set()
data.add("周杰伦")
data.add("林俊杰")
print(data)
# 输出结果:
{
   "周杰伦","林俊杰"}
1.2.2 discard() 删除元素
data = {
   "刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
data.discard("关之琳") 
print(data)
# 输出结果:
{
   "刘嘉玲", "王祖贤","张曼⽟", "李若彤"}
1.2.3 intersection() 或 &:交集
s1 = {
   "刘能", "赵四", "⽪⻓⼭"}
s2 = {
   "刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s3 = s1.intersection(s2)
print(s3) 
s4 = s1 & s2   			  
print(s4)
# 输出结果:{"⽪⻓⼭"}
1.2.4 unio() 或 | :并集
s1 = {
   "刘能", "赵四", "⽪⻓⼭"}
s2 = {
   "刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s3 = s1.union(s2) 		
print(s3)
s4 = s1 | s2   			
print(s4)
# 输出结果:{"刘能", "赵四", "⽪⻓⼭","刘科⻓", "冯乡⻓"}
1.2.5 difference() 或 - :差集
s1 = {
   "刘能", "赵四", "⽪⻓⼭"}
s2 = {
   "刘科⻓", "冯乡⻓", "⽪⻓⼭"}
s3 = s1.difference(s2) 		# s1中有且s2中没有的值 
s4 = s1 - s2   			    # s1中有且s2中没有的值
print(s3)
# 输出结果:{"刘能", "赵四"}

s5 = s2.difference(s1)   	# s2中有且s1中没有的值 
s6 = s2 - s1   			    # s2中有且s1中没有的值
print(s5)
# 输出结果:{"刘科⻓", "冯乡⻓"}

1.3 公共功能

  1. 长度

    v = {
         "刘能", "赵四", "尼古拉斯"}
    data = len(v)
    print(data)
    # 输出结果:3
    
  2. for循环

    v = {
         "刘能", "赵四", "尼古拉斯"}
    for item in v:
    	print(item)
    # 输出结果:
    "刘能"
    "赵四"
    "尼古拉斯"
    

1.4 转换

其他类型转换为集合类型,可以通过set()实现,并且如果有重复的数据会在转换成集合时自动去重。

提示:str / list / tuple / dict 都可以转换为集合。

v1 = "轩小陌"
v2 = set(v1)
print(v2) 
# 输出结果:{"轩","小","陌"}
v1 = [11,22,33,11,3,99,22]
v2 = set(v1)
print(v2) 
# 输出结果:{11,22,33,3,99}

注意:为字符串、列表、元组中的元素去重,是集合日常使用过程中的一个主要功能。

1.5 其他

1.5.1 集合的存储原理

在这里插入图片描述

1.5.2 集合中的元素必须可哈希

因存储原理,集合的元素必须是可哈希的值,即:内部可通过哈希函数把元素转换成一个数值。
在这里插入图片描述
注意:目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的。因此,集合的元素只能是 int、bool、str、tuple 。

  • 转换成功

    v1 = [11,22,33,11,3,99,22]
    v2 = set(v1)
    print(v2) 
    # 输出结果:{11,22,33,3,99}
    
  • 转换失败

    v1 = [11,22,["alex","eric"],33]
    v2 = set(v1)  
    print(v2) 
    # 报错
    
1.5.3 查找效率高

因存储原理的特殊性,集合相比列表和元组,查找效率非常高。

  • 效率低

    user_list = ["轩小陌","alex","李璐"]
    if "alex" in user_list:
        print("在")
    else:
        print("不在")
        
    user_tuple = ("轩小陌","alex","李璐")
    if "alex" in user_tuple:
        print("在")
    else:
        print("不在")
    
  • 效率高

    user_set = {
         "轩小陌","alex","李璐"}
    if "alex" in user_set:
        print("在")
    else:
        print("不在")
    
1.5.4 列表、元组、集合的对比和嵌套
类型 是否可变 是否有序 元素要求 是否可哈希 转换 定义空
list list(其他) v=[]或v=list()
tuple tuple(其他) v=()或v=tuple()
set 可哈希 set(其他) v=set()
data_list = [
    "alex",
    11,
    (11, 22, 33, {
   "alex", "eric"}, 22),
    [11, 22, 33, 22],
    {
   11, 22, (True, ["中国", "北京"], "沙河"), 33}
]
# 通过以上示例可看出:列表中可嵌套元组和集合,元组中可嵌套列表和集合,但集合中只能嵌套元组

注意:由于True和False本质上存储的是 1 和 0 ,而集合又不允许重复,所以在整型 0、1和False、True在集合中同时出现会自动被去重:

v1 = {
   True, 1}
print(v1)  		# 输出结果:{True}

v3 = {
   0, False}
print(v3)  		# 输出结果:{0}

练习题

  1. 写代码实现

    v1 = {
         'alex','轩sir','肖大'}
    v2 = []
    
    # 循环提示用户输入,如果输入值在v1中存在,则追加到v2中,如果v1中不存在,则添加到v1中。(如果输入N或n则停止循环)
    while True:
        name = input("请输入姓名(N/n退出):")
        if name.upper() == "N":
            break
        if name in v1:
            v2.append(name)
    	else:
            v1.add(name)
    
  2. 下面那些值不能做集合的元素

    ""			# 能
    0			# 能
    [11,22,33]   #
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值