zoukankan      html  css  js  c++  java
  • python学习笔记 第三章 数据类型

    第三章 数据类型

    3.1整型(int)

    3.1.1整型的长度

    py2中有:int / long

    py3中有:int (int / long) float

    3.1.2整除

    py2(需要多加一行的代码才能输出不整除的结果) py3正常

    3.1.3强制转换int( )

    1.将只含十进制的数字的字符串转换成整型,详细错误可见见第十三章(1)

    2.将布尔值强制转换成整型,True转换成1,False转换成0

    • 需要确定浮点数的小数位数用round函数

    3.2布尔类型(bool)

    用于表示真假,只有True和False

    • False(其他语言可能是小写), 特殊情况为整型的0和其他数据类型为空的时候

    • True

    • 强制转换

      • bool(整数) bool(0) ---> False

      • bool(字符串) bool("") ---> False

      • bool(列表) bool([]) ---> False

      • bool(元组) bool(()) ---> False

      • dict(字典) bool() ---> False

      • set(集合) bool(set()) ---> False

        v1=bool([])
        v2=bool(())
        print(v1,v2)   #False False
        v3=()
        print(type(v3))   #<class 'tuple'>
        V4=(1)
        print(type(v4))   #<class 'int'>
        v5=(1,)
        print(type(v5))   #<class 'tuple'>
        

    3.3字符串(str)

    字符串是我们写代码中最常用的,python内存中的字符串时按照unicode编码存储,对于字符串来说是不可变的。

    3.3.1字符串独有的功能

    • 独有的功能 upper/lower/replace/join/encode/strip/split/startswith/endswith/isdecimal/format

      • 转化大小写 upper() lower()

      • 替换 replace()

        #打野,大爷,大野,大爷, 打野, 大爷
        message=input("请输入:")
        data=message.replace("大爷","**",2)  #仅替换两次
        print(data)
        
        
      • 去除空格 "你所需要的字符串"等 strip/rstrip/lstrip()

        #去除右边/左边/左边和右边 的空格+
        +	+"你所需要去除的字符串"
        new_name="  -->jjj<----  "
        print(new_name+"----")
        new_name1=new_name.lstrip()
        print(new_name1+"----")
        new_name2=new_name1.rstrip()
        print(new_name2+"-----")
        new_name3=new_name.strip()
        print(new_name3+"-----")
        
        
      • 判断字符串是否可以转化为int型,返回布尔类型,可转化为int型返回True,用于判断十进制数推荐用isdecimal()

        #num="1"
        #num="二"
        num="②"   #这种字符不能转换成十进制数
        v1=num.isdigit()  #"1"-->True  "二"-->False  "②"-->True
        v2=num.isdecimal() #"1"-->True  "二"-->False  "②"-->False   
        v3=num.isnumeric() #"1"-->True  "二"-->True  "②"-->True
        
      • 划分 split / rsplit() / splitlines()根据换行分割

        #message.split(',')/rsplit(',')   根据逗号来切割
        message="小黑今天去吃了两碗面,结果没钱买单,被人打了一顿"
        result=message.split(',',1)  #表示对第一个出现的中文逗号进行切分
        result2=message.rsplit(',',1) #表示从右边开始对message切分
        print(result)   #输出为列表
        print(result2)  
        
      • partition() 找到第一个划分位置,将字符串划分成三份

        v="aaaaabccccc"
        v1=v.partition("b")
        print(v1)   #('aaaaa',"b","ccccc")  #与split()不同的 是划分的份数永远是三个,而且中间是划分的依据
        
      • 判断前几个字符是不是按照要求的 startswith(),若按照要求则返回True

      • 判断后几个字符是不是按照要求的 endswith(),若按照要求则返回True

        name="alex"
        #方式一:
        if name[0:2]=="al":
            print("是")
        else:
          print("否")
        #方式二:
        name1=name.startswith('al')
        print(name1)
        #判断结尾
        name2=name.endswith("ex")
        print(name2)
        
    • 格式化format()

        #name="我叫{0},今年{1}岁".format("王荣瑞",27)
        name="我叫{0},今年{1}岁"    
        name1=name.format("王荣瑞",27)
        print(name1)
      
      • 编码encode()

        name="王帅哥"   #解释器读取到内存以后,按照unicode编码存储:12个字节
        v1=name.encode("utf-8")
        print(v1)       #按照utf-8存储为9个字节
        v2=name.encode("gbk")
        print(v2)       #按照gbk存储为6个字节
        
      • 循环每个元素,并在元素和元素之间加入连接符 join()

        name="alex"    #转化为a_l_e_x
        result="_".join(name)    #以"_"作为连接name
        print(result)
        
      • 特性:字符串是元素不可变,所以字符元素不能修改和删除

        *华丽的分割符

        以下是一些不太常用的字符串的方法

      • casefold() 也是将字符串转换成小写,而且功能更加强大,可以将法语、拉丁语等语言的大写转换成小写

      • isupper() / islower 判断字符串是否全部是大写或者小写

      • capitalize() 首字母变大写

        name="apple"
        new_name=name.capitalize()
        print(new_name)  #Apple  首字母变成大写
        
      • center() 居中

        v="pear"
        v1=v.center(20,"*")
        print(v1)  #********pear********  总共20个字符,正中间的是字符串v
        
      • ljust() / rjust() 与center的功能类似,只不过是将字符放到最左边和最右边的区别

      • zfill() 打印一定数量的0,并将字符串放到末尾,0的数量+字符串的数量=括号内的数量

        v="apple"
        v1=v.zfill(20)
        print(v1)  #000000000000000apple  
        
      • count() 计算子序列出现的次数

        v="apple"
        v1=v.count("")
        print(v1)  #2  p的个数为2个
        
      • find() 找索引的位置,存在则返回索引的位置,不存在则返回-1

        v="apple"
        index=v.find("p")
        print(index)  #1 从左到右寻找第一个p的索引位置
        
      • index() 也是找索引的位置,存在返回索引的位置,不存在报错,见第十三章(2)

      • format_map() 以字典的形式进行的字符串格式化

        v="我是{0},我最喜欢{1}".format("帅哥","打豆豆")
        v1="我是{x1},我最喜欢{x2}".format_map({"x1":"帅哥","x2":"打豆豆"})  #需要对应键的值
        
      • isalnum() 判断是否是字母或者数字

      • isalpha() 判断是否是字母

      • isprintable() 判断是否能打印出来,如空格、换行就不能打印

        v1="aaa
        "
        print(v1.isprintable())  #False
        
      • isspace() 判断是否是空白

      • istitle() 是否英文单词首字母全部都是大写的

        v="Apple Is Good"
        print(v.istitle())  #True
        
      • title() 将所有的英文单词首字母大写

      • swapcase() 大写变小写,小写变大写

      • maketrans() 与 translate() 的结合使用

        x="12345"
        y="aeiou"
        table=str.maketrans(y,x)
        v="haseiaioshuloiyu"
        result=v.translate(table)
        print(result)   #h1s23134sh5l43y5   将y中的字母与x的数字联系到一起,并对v字符串进行替换
        

        华丽的分割线

    3.3.2能使用的公共的功能

    • 索引,获取一个字符

    • 切片,获取一段字符串(子序列) [ : ]

    • 长度,获取字符长度 len()

    • 步长,在切片的基础上加上一定的字符长度 [ : : ]

      name="abcdefg"
      v1=name[0:-1:2]    #设置步长为2
      print(v1)
      v2=name[-1:0:-1]   #设置步长为-1,翻转字符
      print(v2)
      
    • for 循环

    3.3.3强制转换成字符串

    • 强制转换

      • str(999) #"999"
      • str(True) #"True"
      • str(["apple","pear"]) #强制转换会转换为"["apple","pear"]"

      所以其强制转化为字符串最好用v1="".join(["apple","pear"])

    3.3.4字符串格式化

    #字符串格式化补充
    msg1="我是%s,年龄%s"%("apple",123)  #只能用元组,不能用列表
    print(msg1)  #我是apple,年龄123
    
    msg2="我是%(n1)s,年龄%(n2)s"%{"n1":"apple","n2":666}
    print(msg2)  #我是apple,年龄666
    
    msg3="我是{0},年龄{1}".format("apple",888)  #位置传参
    #msg3="我是{0},年龄{1}".format(*("apple",888))
    print(msg3)  #我是apple,年龄888
    
    msg4="我是{name},年龄{age}".format(name="apple",age=0) #关键字传参
    #msg4="我是{name},年龄{age}".format(**{name="apple",age=0}) 
    print(msg4)  #我是apple,年龄0
    

    3.3.5 补充:转义符

    print("
    ")    #打印出换行
    print("\n")   #打印
    
    print("\\n") #打印\n
    
    print(r"\n")   #打印\n
    print(r"
    ")    #打印
    
    #正则表达式中的转义符在python字符串中也刚好有转义的作用
    #但是正则表达式中的转义符和字符串中的转义符并没有关系
    #且还容易冲突
    
    #为了避免这种冲突
    #我们所有的正则都以在工具中测试为结果
    #然后只需要在正则表达式和待匹配的字符串外面加上r即可
    

    3.4列表(list)

    常用于表示多个事物

    3.4.1列表独有的功能

    • 独有的方法 append/insert/pop/remove/clear/extend

      • 在列表的最后追加一个元素 append()

        #append()
        #列表的添加
        users=[]
        while True:
            name=input("请输入姓名:")
            users.append(name)
            print(users)
        
        #录入用户和密码
        users=[]
        for i in range(0,3):
            usr=input("请输入用户名和密码:(格式为'xxx,xxx')")
            users.append(usr)
        #得到一个列表['aaa,123', 'bbb,231', 'ccc,321']
        print(users)
        
        #用户名和密码校验
        usr_name=input("请输入用户名:")
        usr_password=input("请输入密码:")
        for i in users:
            #第一个得到的是 "aaa,123"
            result=i.split(",")   #根据","划分账号和密码
            if result[0]==usr_name and result[1]==usr_password:
                print("登录成功!")
                break
        
      • 在指定的索引位置进行插入 insert()

        users=["小铁匠","安徒恩","哥布林","阿修罗"]
        users.insert(0,"普雷")
        print(users)  #['普雷', '小铁匠', '安徒恩', '哥布林', '阿修罗']
        
      • 删除列表第一个指定的字符串 remove() ,不存在会报错

        #删除列表中的元素
        #remove()
        users=["小铁匠","安徒恩","哥布林","阿修罗","哥布林"]
        users.remove("哥布林")  #只能找到第一个删除
        print(users)      #['小铁匠', '安徒恩', '阿修罗', '哥布林']
        
      • 删除指定位置的字符串,不加指定位置则删除最后一位 pop()

        users=["小铁匠","安徒恩","哥布林","阿修罗","哥布林"]
        users.pop(2)
        print(users)   #['小铁匠', '安徒恩', '阿修罗', '哥布林']
        
        #pop不加任何东西表示默认删除最后一位
        users.pop()
        print(users)   #['小铁匠', '安徒恩', '阿修罗'] 
        

        补充: new=pop(0) 可以将删除的值赋值给一个值保存起来

      • 清空列表 clear()

        users=["小铁匠","安徒恩","哥布林","阿修罗","哥布林"]
        users.clear()
        print(users)  #[]
        
      • 将另一个列表的值添加到本列表中 extend()

        new1=["one","two","three"]
        new2=["four","five","six"]
        new1.extend(new2)
        print(new1)   #['one', 'two', 'three', 'four', 'five', 'six']
        

        注意:元组没有extend()方法

        #extend()方法再解析
        #列表有extend()方法,元组也可以添加到列表中
        #元组没有extend()方法
        new1=["one","two","three"]
        new2=("four","five","six")
        new3=("one","two","three")
        new1.extend(new2)   #元组可以循环添加到列表中
        print(new1)         #['one', 'two', 'three', 'four', 'five', 'six']
        #new2.extend(new3)   #报错
        #print(new2)   #'tuple' object has no attribute 'extend'
        new1.extend(new1)
        print(new1)
        
        
      • reverse(),反转

        v1=[33,22,11,55,44]
        v1.reverse()
        print(v1)
        
      • sort(),排序

        v1=[33,22,11,55,44]
        v1.sort()
        print(v1)   #[11, 22, 33, 44, 55]由小到大
        v1.sort(reverse=False)
        print(v1)   #[11, 22, 33, 44, 55]由小到大
        v1.sort(reverse=True)  
        print(v1)   #[55, 44, 33, 22, 11]由大到小
        
    • 小结

      • 增:

        • append/insert
        • remove/pop/del user[0]
        • user[3] = "修改"
        • 切片/索引
      • 列表的嵌套

        user=["小铁匠","安徒恩",["赛利亚",["卢克"]],"哥布林","阿修罗","哥布林"]
        
        user[0]          #"小铁匠"
        user[0][2]       #"匠"
        user[2]          #["赛利亚",["卢克"]]
        user[2][0]       #"赛利亚"
        user[2][2]       #["卢克"]
        user[2][2][0]    #"卢克"
        user[2][2][0][1] #"克"
        user[2][2][0][-1]#"克"
        

    3.4.2能使用的公共的功能

    • len,记录长度按","分割

      usr_len=len(usr)
      print(usr_len)   #4
      
    • 索引

    • 切片

    • 步长

    #实现一个整数加法计算器(两个数相加)
    #如:content=input("请输入内容:"),用户输入5+9或5+ 9或5 + 9(含空白)
    #然后进行分割转换最终进行整数的计算得到结果
    
    message=input("请输入内容:")
    cal=message.split("+")     #形成列表
    cal_first=int(cal[0].strip())  #列表中前一个数去除空格,转化为整型
    cal_second=int(cal[1].strip()) #列表中后一个数去除空格,转化为整型
    total=cal_first+cal_second
    print("%s结果为%d"%(message,total))
    
    • for循环

      user=["小铁匠","安徒恩","哥布林","阿修罗"]
      for i in user:
          #第一次大循环,i="小铁匠"
          print(i)
          for ele in i:
              #第一次小循环,以i为元素, ele="小"
              print(ele)
      
    • 删除(数字/布尔类型/字符串除外)

      user=["小铁匠","安徒恩","哥布林","阿修罗"]
      del user[0]  
      print(user)  #['安徒恩', '哥布林', '阿修罗']
      

      注意:字符串本身不能修改或者删除,如name="alex",del name[1]会报错

      ​ 列表是可变类型

    • 修改 (数字/布尔类型/字符串除外)

      user=["小铁匠","安徒恩","哥布林","阿修罗"]
      user[1]="哥布林"
      print(user)   #["小铁匠","哥布林","哥布林","阿修罗"]
      #user[0][1]="修"   会报错
      

    3.4.3强制转换成列表

    • list("asdsadsaf") #["a", "s", "d", ...]
    • list((1,2,3)) #[1,2,3] 元组转化成列表

    3.5元组(tuple)

    元组的书写规范(创建以后并不能修改其中的元素)

    #书写规范
    user=[11,22,"你好"]     #列表(可变)
    users=(11,22,"你好")    #元组(不可变)
    print(users)
    

    但是需要分辩是否是修改了元组中的值

    v1=(11,22,33)
    #v1[1]=999   错误
    v1=99   #正确,没有修改元素的值
    

    3.5.1元组独有的功能

    近似可以看成无

    3.5.2能使用的公共功能

    • 索引(排除:int/bool)

      users=(11,22,"你好")
      print(users[2])   #"你好"
      
    • 步长(排除:int/bool)

    • 切片(排除:int/bool)

      只是 生成一个新的值

    • 删除(排除:str/int/bool/tuple)

    • 修改(排除:str/int/bool/tuple)

    • for(排除:int/bool)

    • len(排除:int/bool)

    3.5.3强制转换成元组

    • tuple("asdasfsd") #强制转换为元组("a", "s",...)
    • tuple([1,2,3]) #列表转换为元组(1,2,3)

    3.6字典(dict)

    帮助用户表示一个事物的多种信息,需要注意:之前的列表和元组是有序的,字典是无序的(py3.6以后字典是有序的)

    info={"name":"pig","age":18,"hobby":"chess"}  #冒号前面为键,后面为值
    print(info["name"])            #pig
    print(type(info))              #<class 'dict'>
    print(type(info["age"]))       #<class 'int'>
    

    3.6.1字典独有的功能

    • keys()获取所有的键

      info={"name":"pig","age":18,"hobby":"chess"} 
      for item in info.keys():
          print(item)
      
    • values()获取所有的值

      info={"name":"pig","age":18,"hobby":"chess"} 
      for item in info.values():
          peint(item)
      
    • items()获取所有的键值

      info={"name":"pig","age":18,"hobby":"chess"}  #冒号前面为键,后面为值
      v1=info.keys()    #获取字典中所有键
      v2=info.values()  #获取字典中的所有值
      print(v1)     #dict_keys(['name', 'age', 'hobby'])
      print(v2)     #dict_values(['pig', 18, 'chess'])
      for v3,v4 in info.items():
          print(v3,v4)     #打印所有的键值
      #name pig
      #age 18
      #hobby chess
      
    • get(),获取对应键的值,并且解决查询的键不存在的报错问题

      info={"k1":"v1","k2":"v2"}
      #print(info["k111"])    #会报错KeyError: 'k111'
      value=info.get("k11111") 
      print(value)   #当键不存在的时候返回None,None其实就是python中的空
      value1=info.get("k11111",666)
      print(value1)  #当键不存在的时候返回666
      
    • 删除pop()/del

      info={"k1":"v1","k2":"v2"}
      result=info.pop("k2")
      print(info,result)   #{'k1': 'v1'} v2
      del info["k1"]
      print(info)          #{}
      
      info={"k1":"c1","k1":"c2"}
      result=info.pop("k1")
      print(info,result)    #全部包含"k1"的键值都删除{} c2
      info={"k1":"c1","k1":"c2"}
      del info["k1"]
      print(info)          #包含"k1"的 键值都删除{}
      
    • update()

      info={"k1":"v1","k2":"v2"}
      #放一个不存在的值是添加
      info.update({"k3":"v3","k4":"v4"})
      print(info)    #{'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'}
      #放一个存在的值是更新(覆盖)
      info.update({"k2":"666"})
      print(info)    #{'k1': 'v1', 'k2': '666', 'k3': 'v3', 'k4': 'v4'}
      

    3.6.2能使用的公共功能

    • len 有多少个键值就为多少

    • 索引

      info={"name":"pig","age":18,"hobby":"chess"} 
      info['name']
      info['age']
      
    • 切片(无)

    • 步长(无)

    • for

      主要还是通过keys() / values() /items()

      #一个报错的栗子
      info={"name":"pig","age":18,"hobby":"chess"}
      for item,v in info:
          print(item,v)     #ValueError: too many values to unpack (expected 2)
      
      
      #加深对于items()的理解
      info={"name":"pig","age":18,"hobby":"chess"}
      for i in info.items():
          print(i)
      #此时并不会报错
      #('name', 'pig')
      #('age', 18)
      #('hobby', 'chess')
      
      #其实类似
      v="1+3"
      result=v.split("+")
      print(result)            #['1', '3']
      print(type(result))      #分割以后是列表<class 'list'>
      #可以用result[0]和result[1]来表示
      a,b=v.split("+")        #把1赋值给a,3赋值给b
      print(type(a))          #<class 'str'>
      print(a,b)              #1  3
      
      #同理元组和列表也可以这样进行取值
      c,d=[1,3]
      print(c,d)   #1 3
      e,f=(1,3,)
      print(e,f)   #1 3
      
    • 修改

      #修改值
      info={"name":"pig","age":18,"hobby":"chess"}
      info['name']="duck"      
      print(info)  #{'name': 'duck', 'age': 18, 'hobby': 'chess'}
      
      #修改键
      #删除后再增加
      info={"name":"pig","age":18,"hobby":"chess"}
      del info['hobby']
      #若字典中没有这样一个键的时候,会添加这样一个键和值
      info['play']='chess'  #{'name': 'pig', 'age': 18, 'play': 'chess'}
      
    • 删除

      #删除的时候,键和值是一个整体
      info={"name":"pig","age":18,"hobby":"chess"}
      del info['name']
      print(info)    #{'age': 18, 'hobby': 'chess'}
      
      

    3.6.3强制转换成字典

    好像还没见到过

    v="aaahuds"
    #print(dict(v))  #dictionary update sequence element #0 has length 1; 2 is required 报错
    v1="hhhh"
    print(dict({v:v1}))  #{'aaahuds': 'hhhh'}   还是需要按照字典的格式进行转换
    

    3.6.4有序字典

    #有序字典
    from collections import OrderedDict  #按ctrl点击OrderedDict可以查看其中的方法
    info=OrderedDict()
    info["k1"]=123
    info["k2"]=456
    #循环 打印一定先打印k1,后打印k2
    for item,key in info.items():
        print(item,key)
        
    # k1 123
    # k2 456
    

    补充:

    print("示例一:")
    li=["李杰","李女神","猪猪","李连杰"]
    for item in li:
        print(item)
        if item.startswith("李"):
            li.remove(item)
    print("****************")
    print(li) #['李女神', '猪猪']
    
    print("示例二:")
    li=["李杰","李女神","猪猪","李连杰"]
    for i in range(len(li)-1,-1,-1):  #从后往前取
        print(li[i])
        if li[i].startswith("李"):
            li.remove(li[i])
    
    print("***************")
    print(li)
    

    3.7集合(set)

    列表/字典/集合 不能做集合的元素

    v={}
    print(type(v))  #空字典<class 'dict'>
    v1=set()
    print(type(v1)) #空集合<clss 'set'>
    v3={1,2,3,4}  #非空的集合
    

    3.7.1集合独有的功能

    • 独有的功能(字典是无序的,且没有重复值)

      • add()增加

        v={1,2}
        v.add("李韶奇")
        print(v)  #{1, 2, '李韶奇'}
        v.add("李韶奇")
        print(v)  #{1, 2, '李韶奇'}
        
      • discard()删除,没有索引的删除

        v={1,2,"李韶奇"}
        v.discard("李韶奇")
        print(v)  #{1, 2}
        
      • remove()删除,不存在就会报错

        v={1,2}
        v.remove(0)
        print(v)  #报错,KeyError: 0
        
      • update(),可以批量添加

        v={11,22,3,}
        v.update({"里塞奇",33})  #相当于批量增加
        print(v)  #{33, 3, 22, 11, '里塞奇'}
        
      • 交集intersection()

        v={1,2,"韶奇"}
        v.intersection({1,"韶奇"})
        print(v)  #{1, 2, '韶奇'}
        #可以看出 intersection并不改变其原来的集合,需要生成新的值
        v1=v.intersection({1,"韶奇"})
        print(v1)   #{1, '韶奇'}
        
        #注意,intersection()后面也可以用列表
        
      • 并集union()

        v={1,2,"apple"}
        v1=v.union({1,2,"pear"})
        print(v1)   #{1, 2, 'pear', 'apple'}
        
      • 差集difference()

        v1={1,2,"apple"}
        v2={1,2,"pear"}
        v3=v1.difference(v2)  #在集合v1中有,而v2中没有的元素
        print(v3)   #{"apple"}
        v4=v2.difference(v1)  #在结合v2中有,而v1中没有的元素
        print(v4)   #{"pear"}
        
      • 对称差集symmetric_difference()

        v1={1,2,"apple"}
        result=v1.symmetric_difference({1,2,"pear"})
        print(result)   #{'apple', 'pear'}
        

    3.7.2能使用的公共功能

    • 公共的方法

      • len

      • for循环

        v={1,2,"apple"}
        for item in v:
            print(item)
        
    • 集合的嵌套

      #列表/字典/集合  不能放在集合中,不能作为字典的key(unhashable)
      

      哈希是什么?内部为了查找的方便,会将值进行哈希算法得到一个值(对应内存地址),用于快速查找

      • 集合的特殊情况

        v1={1,"True"}
        print(v1)  #{1, 'True'}
        v2={1,True}
        print(v2)  #{1}
        v3={1,False}
        print(v3)  #{False, 1}
        

    3.7.3强制转换成集合

    v0="abacde"
    print(set(v0))  #{'d', 'c', 'b', 'e', 'a'}  #对于重复的单个字符串不会再添加到集合中
    v=[1,2,3,4]
    print(set(v)) #{1, 2, 3, 4}   #列表转换成集合
    v1=(1,2,3,4)
    print(set(v1))  #{1, 2, 3, 4}  #元组转换成集合
    
    v2={"k1":"apple","k2":"pear"}
    print(set(v2))  #{'k2', 'k1'} 将键转换成集合的元素
    

    3.8嵌套问题

    3.8.1列表和元组的嵌套

    v2=[11,22,33,(11,22,33)]
    v2[-1][1]=99  #错误,元组中的元素不能修改 
    v2[-1]=123    #正确
    
    v3=(11,22,33,[11,22,33])
    v[-1]=123     #错误,列表是元组的元素,不能修改
    v[-1][2]=99   #正确,列表中的值可以修改
    

    3.8.2字典的嵌套

    info={
        "k1":"v1",   #值可以嵌套字符串
        "k2":True,   #值可以嵌套布尔类型
        "k3":1,      #值可以嵌套整型
        "k4":[1,2,3],#值可以嵌套列表
        "k5":(1,2,3),#值可以嵌套元组
        "k6":{"kk":"vv"}, #值可以嵌套字典
        #所有的数据类型都可以当字典的值
        
        1:{"kk":"vv"},  #整型可以当键
        False:{"kk":"vv"}, #布尔值可以当键
        "你好胖":{"kk":"vv"}, #字符串可以当键
        (1,2,3):{"kk":"vv"}, #元组可以当键
        #列表和字典不可以当键,会产生TypeError: unhashable type: 'list'
        #表示列表和字典类型不可哈希
        #[1,2,3]:{"kk":"vv"}, #列表不可以当键
        #{1,2,3}:{"kk":"vv"} #字典不可以当键
        #由于这两个数据类型是可变类型,哈希函数不可放可变的数据类型
    }
    print(info)
    #{'k1': 'v1', 'k2': True, 'k3': 1, 'k4': [1, 2, 3], 'k5': (1, 2, 3), 'k6': {'kk': 'vv'}, 
    #1: {'kk': 'vv'}, False: {'kk': 'vv'}, '你好胖': {'kk': 'vv'}, (1, 2, 3): {'kk': 'vv'}}
    
    #嵌套后的取值
    #data=[1,2,{"k1":1,"k2":2,"k3":(11,22,33),"k4":[1,(12,3,4)]},3]
    #想取到数值12
    data=[1,2,{"k1":1,"k2":2,"k3":(11,22,33),"k4":[1,(12,3,4)]},3]
    num=data[2]["k4"][1][0]
    print(num)
    
    #想在字典中的列表中第一个位置插入9
    data[2]["k4"].insert(0,9)
    print(data)  #[1, 2, {'k1': 1, 'k2': 2, 'k3': (11, 22, 33), 'k4': [9, 1, (12, 3, 4)]}, 3]
    

    3.9各种数据类型为空的情况

    #None
    v1=int()
    print(v1)  #0
    v2=bool()
    print(v2)  #False
    
    v3=""
    v4=str()
    print(v3,v4) #空字符串
    
    v5=[]
    v6=list()
    print(v5,v6)  #空列表[] []
    
    v7=()
    v8=tuple()
    print(v7,v8)  #空元组() ()
    
    v9={}
    v10=dict()
    print(v9,v10) #空字典{} {}
    
    v11=set()
    print(v11)    #空集合 set()
    

    3.10列表、元组、字典、集合的区别和特征

    • 元组:对象有序排列,通过索引读取读取,对象不可变。
    • 列表:对象有序排列,通过索引读取读取,对象是可变的。
    • 字典:对象的无序集合,通过键值(key-value)读取,可变的,键唯一,且不可变,值可变,可以任意嵌套
    列表 元组 字典 集合
    是否可变 否,元组不可变
    索引 下标 下标 键值对 值,不会重复,唯一
    是否有重复值 有重复值 有重复值 有重复值 无重复值
    是否有序 有序 有序 无序 虚无
  • 相关阅读:
    TextBox 只有下划线
    can't find web control library(web控件库)
    DropDownListSalesAC”有一个无效 SelectedValue,因为它不在项目列表中。
    IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型
    如何打印1px表格
    CSS控制打印 分页
    Virtual Server could not open its emulated Ethernet switch driver. To fix this problem, reenable the Virtual Server Emulated Et
    Xml中SelectSingleNode方法中的xpath用法
    热带水果莫入冰箱?水果存放冰箱大法
    探索Asp.net的Postback机制
  • 原文地址:https://www.cnblogs.com/wrrr/p/13915516.html
Copyright © 2011-2022 走看看