zoukankan      html  css  js  c++  java
  • 数据类型

    (一)概述

      本篇文章主要对基础的数据类型继续进行介绍,介绍主要分以下几个部分:

    1. 格式化输出
    2. 初识运算符
    3. 编码的初识
    4. 基础数据类型之int、bool
    5. 基础数据类型之str
    6. for循环
    7. 基础数据类型之list
    8. 基础数据类型之tuple
    9. 基础数据类型之dic
    10. 基础数据类型之可能遇到的坑

    (二)内容详解

          1.格式化输出

    • 格式化输出的形式:%+数据类型
    • 数据类型包括 s:字符串 d:整数 f:浮点型 r:内置函数
    • 格式化输出的三种形式:
      • 形式1:采用手动输入的方式进行格式化输出
      • name = input('请输入你的姓名:')
        age = input('请输入你的年龄:')
        job = input('请输入你的工作:')
        hobbly = input('请输入你的爱好:')
        msg = '''
        ----------info of %s------------
        Name:%s
        Age:%d
        Job:%s
        Hobbly:%s
        -----------end------------------
        ''' % (name, name, int(age), job, hobbly)
        print(msg)
      • 形式2:通过字典自动匹配输出,可以只选择字典中的部分进行输出
      • dic = {'name': '马玉刚', 'age': 31, 'job': 'IT', 'hobbly': '篮球', 'sex': ''}
        msg = '''
        ------------info of %(name)s-------------
        Name:%(name)s
        Job:%(job)s
        Hobbly:%(hobbly)s
        Age:%(age)s
        --------------end--------------------------
        ''' % dic #%dic 不能忘记,此处是通过key与字典进行关联。
        print(msg)
      • 形式3:通过format进行格式化输出
      • res = '{} {} {}'.format('egon', 18, 'male')
        print(res)
        res = '{1} {2} {1}'.format('egon', 18, 'male')   # 根据指定的索引进行格式化输出
        print(res)
        res = '{name} {age} {sex}'.format(sex='male', name='egon', age=18)
        print(res)
    • 注意:在格式化输出时,如果只是单纯的表示%,要写成%%。
    • msg = '我叫%s,今年%d,学习进度为5%%' % ('马玉刚', 31)
      print(msg)

          2.初识运算符

    • 运算符的分类包括算数运算符、比较运算符、逻辑运算符、成员运算符等。
    • # -*- encoding:utf-8 -*-
      
      '''算数运算:+ - * / % ** //'''
      # a = 10
      # b = 3
      # print(a % b)  # 求a除以b的余数,通常用于除以2来判断数字的奇偶性
      # print(a ** b)  # a的b次幂
      # print(a // b)  # a除以b的商
      
      '''比较运算:== != > < >= <='''
      # 比较运算输出的是bool值
      # print(3 != 2)  # True
      
      '''逻辑运算 not and or'''
      #优先级顺序,从高到低:()not and or
      #同一优先级,从左到右依次执行
      
      # 1、逻辑运算两边都是比较:根据优先级进行计算,输出的值为bool值。
      print(3 > 2 and 3 < 4 or 5 > 6 and 2 < 5)  # True
      print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6)  # False
      print(True or False)  # True
      
      # 2、逻辑运算两边都是数字
      x or y,if x is True,return x,else retuen y.
      x and y,if x is True,return y,else return x.
      print(1 or 3)  # 1
      print(100 or 3)  # 100
      print(-10 or 3)  # -10
      print(0 or 3)  # 3
      print(1 and 3 or 4)  # 3
      print(0 and 3 or 5)  # 5
      
      #补充 int<->bool间的转换
      int---->bool:非0即True
      print(bool(100))  # True
      bool--->int True 1,False 0
      print(int(True)) # 1
      print(int(False)) # 0
      
      # 3、逻辑运算两边是数字或者是比较
      print(1 and 4 < 6 or 5) # True  # 逻辑运算符优先于比较运算符
      
      '''成员运算:判断某些元素在不在一个序列中 str tuple list dict set'''
      in not in
      
      s1 = 'ab'
      s11 = 'ak'
      s2 = 'abkcdcekengeh'
      print(s1 in s2)  # True
      print(s11 in s2) # False
      
      #示例:作业题会应用到一下示例,即用户输入一个内容,判断输入的内容是否在序列中。
      content = input('请输入你需要购买的商品:')
      s1 = {'01':'苹果手机','02':'小米耳机','03':'三星手机'}
      if content in s1.keys():
          print('恭喜您,您购买的货品充足')
      else:
          print('抱歉,您购买的货物不存在,请您重新输入,谢谢!')

          3.编码的初识

    • 目前,公认的有4种编码方式即ASCII编码、Unincode编码、UTF-8编码、GBK编码。
    • 01  ASCII编码方式:美国根据美国的26个字符和其他字符的需求定义的一套编码方式,只能表示256个字符,其中一个字符用一个字节表示。
          8bit == 1bytes
          bit - 位
          bytes - 字节
          0000 0001 共计256种可能,代表256个不同的字符。
          举例:ABC用ASCII编码方式如下:
          A -  01000001
          B -  01000010
          C -  01000011
          所以ABC的编码输出为:010000010100001001000011
          'hello':5个字节。
          缺点:代表的字符有限,无法涵盖其他国家的字符。
      02  Unicode编码方式:又称万国码,将世界所有国家的文字都涵盖。
          起初;16位,即两个字节表示一个字符。举例如下(示意):
              a: 01000001 01000001
              中:01000101 01000001
          升级:32位,即用4个字节表示一个字符。举例如下(示意):
              a: 01000001 01000001 01000101 01000001
              中:01000101 01000001 01000101 01000001
          缺点:浪费资源和空间。
      03  Utf-8编码方式:最少用8位,即一个字节表示一个字符,根据每个国家的字符的实际个数用不同的字节数显示,举例如下(示意):
                 a:01000001 (一个字节)
          欧洲文字:01000001 01000001 (两个字节)
          亚洲  中:01000001 01000001 01000001 (三个字节)
          说明:由于节省资源和空间,所以,通常在编码的时候采用utf-8的编码方式进行编码。
      04  GBK的编码方式:即国标,只包含ASCII编码和中文,举例如下(示意):
            a:01000001 (一个字节)
           中:01000001 01000001 (两个字节)
    • 单位转换公式
    •     8bit == 1bytes
          1024bytes == 1kb
          1024kb == 1MB
          1024MB == 1GB
          1024GB == 1TB
          1024TB == 1PB

      4.基础数据类型之int、bool

    • '''01 int'''
      # bit_length():计算10进制转化成为二进制的有效位数
      i = 10
      i1 = 6
      print(i.bit_length(), i1.bit_length())
      
      '''示例如下:
      十进制       二进制
        1        0000 0001
        3        0000 0011
        6        0000 0110
      '''
      
      '''02 bool'''
      
      # str--->bool:非空即True
      s1 = 'Alex'
      s2 = ' '
      s3 = ''
      print(bool(s1))  # True
      print(bool(s2))  # True
      print(bool(s3))  # False

          5.基础数据类型之str

    • 字符串数据类型主要是切片、索引以及15种有关字符串运算的方法
    • # -*- encoding:utf-8 -*-
      '''索引'''
      s = 'python24期'
      # 索引:字符串中每个字符都有一个索引,索引从左至右计数,并且从0开始计数。
      s1 = s[0]
      print(s1, type(s1)) # p <class 'str'>
      print(s, s1) # python24期 p
      s2 = s[8]
      s3 = s[-1]  # 索引为‘-1’指的是字符串的最后一个字符的索引。
      print(s2)  #
      print(s3)  #
      # 结论:对字符串操作都会形成新的字符串,与原来的字符串无关
      
      '''切片'''
      # 切片的原则:顾头不顾尾,即相当于输出的切片实际长度为'结束索引-1'
      # 切片方法:s[起始索引:'结束索引+1':步长],如果结束索引为"-1",则方法中的加1变成减1,即从左往右数'+1',从右往左数'-1'.
      # 省略说明:起始索引可以省略,默认为0;步长可以省略,默认为1;起始索引、结束索引和步长都可以省略,直接打印整个字符串。
      s = 'python24期'
      print(s[:2]) # py
      print(s[:])  # python24期
      print(s[:6:2])  # pto
      print(s[-1:-4:-1])  # 期42,如果是从右往左,一定要加上步长,并且步长是负数,比如'-1'
      
      '''字符串常用的方法'''
      
      # 方法1:capitalize() 首字母大写,其他字母小写  *
      s = 'oldBoy'
      print(s.capitalize())  # Oldboy
      
      # 方法2:swapcase() 大小写反转 *
      s = 'oldBoy'
      print(s.swapcase())  # OLDbOY
      
      # 方法3:center 居中 设置宽度 *
      s = 'oldBoy'
      print(s.center(20, '-'))  # 20是指整个输出字符的长度,'-'用于填充空白区域。
      
      # 方法4:title() 非字母隔开的'单词'首字母大写 *
      s = 'alex wusir2taibai*ritian'
      print(s.title()) # Alex Wusir2Taibai*Ritian
      
      # 方法5:upper() 全大写    **
      s = 'oldBoy'
      print(s.upper())    # OLDBOY
      
      # 方法6:lower() 全小写    **
      s = 'oldBoy'
      print(s.lower())     # oldboy
      
      '''举例:通过校验验证码进行模拟验证登录'''
      usrname = input('请输入用户名:')
      password = int(input('请输入密码:'))  # 如果密码定义的数字,需要进行一下字符串与数字的转换,因为input的输入的字符串类型
      your_code = input('请输入正确的验证码:')
      code = 'abcdeFgh'
      if usrname == '马玉刚' and password == 123456:
          if your_code.upper() == code.upper():
              print('登录成功')
      
      username = input('请输入账号:')
      password = input('请输入密码:')
      code = 'QerAg'.upper()
      your_code = input('请输入验证码:').upper() # QERAG,Qerag.....
      if username == 'alex' and password == 'SB':
          if your_code == code:
              print('登录成功')
      
      # 方法7:startswith() 判断以什么开头  **
      s = 'oldBoy'
      print(s.startswith('o'))  # True
      print(s.startswith('old'))  # True
      
      # 方法8:endswith() 判断以什么结尾 **
      s = 'oldBoy'
      print(s.endswith('B'))  # False
      print(s.endswith('y'))  # True
      print(s.endswith('B',0,4))  # 索引0-4进行切片,切片后进行判断。
      
      # 方法9:strip() 默认去除str前后两端换行符(
      ),制表符(	)-相当于tab,空格。***
      s = '   
      oldBoy	'
      print(s.strip())   # oldBoy
      print(s.lstrip())  #  只去除左边的空格
      print(s.rsplit())   # 只去除右边的制表符
      
      '''strip()方法示例:由于在输入用户名和密码有时会带有换行符和制表符,所以在登录验证的时候利用该方法可以自动去除换行符合制表符'''
      usrname = input('请输入用户名:').strip()
      password = input('请输入密码:').strip()
      if usrname == '马玉刚'and password == '123456':
          print('恭喜你,登录成功!')
      # 方法10:split()  将str转换为list,默认是按照空格进行分割,也可以进行指定分割符号 ***
      s = 'alex wusir barry'
      s1 = 'alex,wusir,barry'
      s2 = ',alex,wusir,barry,'
      print(s.split())
      print(s1.split(','))  # 指定分割符号为',',实际分割的个数:“字符串中分割符号总数+1”  #['alex', 'wusir', 'barry']
      print(s2.split(','))  # 指定分割符号为',',实际分割的个数:“字符串中分割符号总数+1”  #['', 'alex', 'wusir', 'barry', '']
      print(s2.split(','))  # 指定分割符号为',',实际分割的个数:“字符串中分割符号总数+1”  #['', 'alex', 'wusir', 'barry', '']
      
      # 方法11:join:将字符串中的字符间用指定的字符进行两两连接,用途之一是将list转换为str ***
      s = 'oldBoy'
      print('_'.join(s))
      print('Alex'.join(s))
      
      list-->str:将list转换为str
      l1 = ['alex', 'wusir', 'barry']
      s = ''.join(l1)
      s1 = ' '.join(l1)
      print(s)  # alexwusirbarry
      print(s1)  # alex wusir barry
      
      # 方法12: replace:将字符串中的某个元素进行替换,如果不指定次数替换字符串中所有的该元素,如果指定次数,则按照指定次数进行替换***
      s = 'alex,alex, wusir, barry'
      print(s.replace('alex', '太白'))  # 太白,太白, wusir, barry
      print(s.replace('alex', '太白', 1))  # 太白,alex, wusir, barry
      
      # 方法13:is 系列 ***
      age = '31'
      print(age.isalnum()) #字符串由字母或数字组成
      print(age.isalpha()) #字符串只由字母组成
      print(age.isdigit()) #字符串只由数字组成 str ---> int 可以作为一个判断条件  ***
      
      # 方法14:find:通过元素找索引,找不到返回为 -1  ***
      s = 'oldBoy'
      print(s.find('d'))   # 2
      print(s.find('A'))  # 可切片  -1
      
      # 方法15:index:通过元素找索引,找不到报错  ***
      s = 'oldBoy'
      print(s.index('d'))  # 2
      print(s.inedex('A'))  # 报错
      
      # 公共方法  ***
      # len:统计元素的总个数
      s = 'fjsdaklfjsdklafjsadf'
      print(len(s))
      # count:测试某个元素出现的个数
      s = 'fjsdaklfjsdklafjsadf'
      print(s.count('s'))

      6.for循环

    • # 形式:for 变量 in iterable:
      # 输出:输出的元素个数为字符串s的个数。
      # 说明:只要循环被break打断,则不执行else程序。
      s = 'fdksj'
      for i in s:
          print(i+'Alex')  # 依次与'Alex拼接'之后打印输出,输出的元素个数为字符串s的个数
      
      #只要循环被break打断,则不执行else程序,否则循环执行完成后,执行else语句。
      s = 'fdksj'
      for i in s:
          print(i)
          if i == 'f':
              break
      else:
          print(666)

           7.基础数据类型之list

    • # -*- encoding:utf-8 -*-
      
      '''列表的说明:
      01 list可以存储各种数据类型,同时支持存储大量的数据。# li = ['alex', 123, True, (1, 2, 3, 'wusir'), [1, 2, 3, '小明', ], {'name': 'alex'}]
      02 list是有序的,有索引值,可切片,便于取值。
      '''
      
      
      
      '''01 索引的的切片(与字符串完全一样)'''
      l1 = ['alex', 'wusir', '太白', 100, '女神']
      print(l1[0], type(l1[0]))    # alex <class 'str'>
      print(l1[-2], type(l1[-2]))    # 100 <class 'int'>
      print(l1[:2])  #  ['alex', 'wusir']
      
      '''02 列表的新增:增加有3种方式,即append insert extend'''
      
      # append 追加:直接在列表的最后面添加新增的元素即可
      l1 = ['alex', 'wusir', 'wusir', 'wusir','太白', 100, '女神']
      print(l1.append('文刚')) # 追加过程无输出
      print(l1) # ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神', '文刚']
      
      # insert 插入:根据指定的索引进行插入
      l1 = ['alex', 'wusir', 'wusir', 'wusir','太白', 100, '女神']
      l1.insert(1, 'oldBoy')  # 1是指列表的索引
      print(l1)
      
      # extend 迭代的追加:
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l1.extend('abd')
      print(l1)  # ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神', 'a', 'b', 'd']
      l2 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l2.extend(['abc', 'erf'])
      print(l2)  # ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神', 'abc', 'erf']
      
      '''03 删除的4种方法:即pop remove clear del'''
      pop:根据指定的索引进行删除。
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      ret = l1.pop(1)
      print(ret)  # wusir
      print(l1) #  ['alex', 'wusir', 'wusir', '太白', 100, '女神']
      
      # remove:根据指定的元素值进行删除
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l1.remove(100)
      print(l1)  # ['alex', 'wusir', 'wusir', 'wusir', '太白', '女神']
      
      #clear:直接清空整个列表
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l1.clear()
      print(l1)  # []
      
      # del:根据索引、切片(步长)两种方式进行删除
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      del l1[0]
      print(l1)  # ['wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l2 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      del l2[::2]
      print(l2)  # ['wusir', 'wusir', 100]
      
      '''04 列表修改的2种方法:即按照索引直接修改、按照切片直接修改'''
      # 直接按照索引进行替换
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l1[1] = 'SB'
      print(l1)  # ['alex', 'SB', 'wusir', 'wusir', '太白', 100, '女神']
      # 直接按照切片进行修改
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l1[:2] = 'abcdcegef'
      print(l1)  # ['a', 'b', 'c', 'd', 'c', 'e', 'g', 'e', 'f', 'wusir', 'wusir', '太白', 100, '女神']
      
      # 加上步长一定要一一对应。
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l1[::2] = 'abcd'  # 由于需要替换4个,所以,如果将abcd修改为abc会报错。
      print(l1)  # ['a', 'wusir', 'b', 'wusir', 'c', 100, 'd']
      
      '''05 列表的查询:根据索引、切片、切片(步长)进行查询'''
      # 通过for循环,将列表中的所有元素按照列进行展示
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      for i in l1:
          print(i)  # 按照列的方式,展示每个元素。
      通过索引进行查询
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      print(l1[5])  # 100
      通过切片进行查询(顾头不顾尾)
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      print(l1[:5])  # ['alex', 'wusir', 'wusir', 'wusir', '太白']
      通过切片(步长)的方式进行查询
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      print(l1[0:6:3])   # ['alex', 'wusir']
      
      '''06 index:通过元素查询索引'''
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      print(l1.index('alex'))  # 0
      print(l1.index('wusir'))  # 1 针对多个相同元素的列表,通过index查询索引时,只要查询到一个即停止查询,并将索引值返回。
      
      '''07 sort:从小到大排序:通常只是针对整形的列表使用'''
      l1 = [1, 10, 8, 6, 9, 2, 5, 4, 3]
      l1.sort()  # 对l1进行从小到大排序
      print(l1)  # [1, 2, 3, 4, 5, 6, 8, 9, 10]
      l1.sort(reverse = True)  # 对l1进行从大到小的排序
      print(l1)  # [10, 9, 8, 6, 5, 4, 3, 2, 1]
      
      '''08 reverse:将列表顺序反转'''
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      l1.reverse()
      print(l1)   # ['女神', 100, '太白', 'wusir', 'wusir', 'wusir', 'alex']
      
      '''09 len:统计列表的长度'''
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      print(len(l1))  # 7
      
      '''10 count:统计列表中某个元素的个数'''
      l1 = ['alex', 'wusir', 'wusir', 'wusir', '太白', 100, '女神']
      print(l1.count('wusir'))  # 3
      
      '''11 列表的嵌套:对列表中嵌套的列表、字典等进行操作'''
      
      # 将列表中的'wusir'全部大写
      l1 = ['alex', 'wusir', [1, 'taibai']]
      l1[1] = l1[1].upper()
      print(l1)  # ['alex', 'WUSIR', [1, 'taibai']]
      
      # 将列表中的'taibai'的首字母大写
      l1 = ['alex', 'wusir', [1, 'taibai']]
      l1[2][1] = l1[2][1].capitalize()
      print(l1)  # ['alex', 'wusir', [1, 'Taibai']]
      
      '''12 range的使用:range可以看做自定义的数字范围列表,一般都是与for循环结合,也遵循"顾头不顾尾"的原则。'''
      for i in  range (1,10):
          print(i)
      for i in range(1,20,2):
          print(i)
      
      for i in range(20, 1, -1):
          print(i)
      # 利用for循环打印出列表的索引
      l1 = ['alex', 'wusir', 'wusir', 100, '女神']
      
      for i in l1:
          print(l1.index(i))
          
      # 利用for range 打印出列表的索引。
      l1 = ['alex', 'wusir', 'wusir', 100, '女神']
      print(len(l1))
      for i in range(len(l1)):
          print(i)

          8.基础数据类型之tuple

    • '''
      01 元组是只读列表。
      02 可以索引,可以切片(步长)。
      03 不能增删改(儿子不能,孙子有可能),只能查询。
      04 index, count, for 循环。
      '''
       # 根据索引进行查询
      tu = (1, True, [12, 3], 'afdlsfa')
      print(tu[2])  # [12, 3]
      
       # 根据切片(步长)进行查询
      tu = (1, True, [12, 3], 'afdlsfa')
      print(tu[::2])  # (1, [12, 3])
      
      # len:查询元祖的元素个数
      tu = (1, True, [12, 3], 'afdlsfa')
      print(len(tu))  # 4
      
      # count:查询元祖中某个元素的个数
      tu = (0, False, True, [12, 3], 'afdlsfa')
      print(tu.count(True))   # 1
      
      # for循环打印元祖的所有元素
      tu = (0, False, True, [12, 3], 'afdlsfa')
      for i in tu:
          print(i)
      # for和range配合打印出元祖的所有索引。
      tu = (0, False, True, [12, 3], 'afdlsfa')
      for i in range(len(tu)):
          print(i)
      
      # index:根据索引查询元祖中的索引
      tu = (0, False, True, [12, 3], 'afdlsfa')
      print(tu.index([12, 3]))

          9.基础数据类型之dic

    • '''字典整体说明:
      01 键值对出现,即key:value。
      02 key是唯一的不能重复的。
      03 可以存储大量的关系型数据。
      04 字典的3.5以及3.5以下的版本中元素是无序的,3.6之后字典是有序的,但是没有索引,只是依据字典建立的顺序进行有序存储。
      05 字典的key:int str bool tuple ,其中bool和tuple不常用。
      06 字典的key是不可变的数据类型(可哈希)。
      07 字典的value:可以是任意数据类型。
      '''
      
      '''01 字典的新增'''
      # 按照键值对增加,有则改之,无则增加
      dic = {'name': 'TaiBai', 'age': 25, 'sex': '',}
      dic['job'] = 'IT'
      print(dic)
      dic['name'] = '马玉刚'
      print(dic)
      
      # setdefault:无则添加,有则不变
      dic = {'name': 'TaiBai', 'age': 25, 'sex': ''}
      dic.setdefault('job')
      print(dic)  #  无则增加  {'name': 'TaiBai', 'age': 25, 'sex': '男', 'job': None}
      dic.setdefault('job', 'IT')  #  有则不变   {'name': 'TaiBai', 'age': 25, 'sex': '男', 'job': None}
      print(dic)
      
      dic1 = {'name': 'TaiBai', 'age': 25, 'sex': ''}
      dic1.setdefault('job', 'IT')
      print(dic1)  # {'name': 'TaiBai', 'age': 25, 'sex': '男', 'job': 'IT'}
      
      '''02 字典的删除 '''
      # pop:按照key进行删除。
      dic = {'name': 'TaiBai', 'age': 25, 'sex': ''}
      ret = dic.pop('name')
      print(ret)  # 返回的是删除的值 TaiBai
      print(dic)  # {'age': 25, 'sex': '男'}
      
      # clear:清空整个字典表。
      dic = {'name': 'TaiBai', 'age': 25, 'sex': ''}
      dic.clear()
      print(dic)  # {}
      
      # del:按照key进行删除。
      dic = {'name': 'TaiBai', 'age': 25, 'sex': ''}
      del dic['name']
      print(dic)   # {'age': 25, 'sex': '男'}
      
      '''03 字典的改'''
      # 按照key直接修改
      dic = {'name': 'TaiBai', 'age': 25, 'sex': ''}
      dic['name'] = '马玉刚'
      print(dic)  # {'name': '马玉刚', 'age': 25, 'sex': '男'}
      
      # update:无则添加,有则更新
      dic = {"name": "jin", "age": 18, "sex": "male"}
      dic2 = {"name": "alex", "weight": 75}
      dic2.update(dic)  # 将dic 的所有键值对覆盖并添加到dic2中。dic不变。
      print(dic)  # {'name': 'jin', 'age': 18, 'sex': 'male'}
      print(dic2)  # {'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}
      
      '''04 字典的查询'''
      # 按照key进行查询
      dic = {"name": "jin", "age": 18, "sex": "male"}
      print(dic['name'])  # jin
      print(dic['name1'])  # 报错
      
      # get:根据关键字进行查询
      dic = {"name": "jin", "age": 18, "sex": "male"}
      print(dic.get('name'))  # jin
      print(dic.get('name1'))  # None
      print(dic.get('name1', '没有此键'))  # 没有此键:如果没有key,返回值可以自定义,默认返回为None
      
      '''05 for循环'''
      dic = {"name": "jin", "age": 18, "sex": "male"}
      print(dic.keys())
      for i in dic.keys():
          print(i)
      
      print(list(dic.keys()))  # ['name', 'age', 'sex']
      print(dic.values())  # dict_values(['jin', 18, 'male'])
      print(dic.items())  # dict_items([('name', 'jin'), ('age', 18), ('sex', 'male')])
      
      a, b, c = 1, 2, 3
      a, b, c = [1, 2, 3]
      print(a, b, c)
      
      # 两值互换
      a = 10
      b = 100
      a, b = b, a
      print(a, b)
      
      # 依次打印字典的key和value
      dic = {"name": "jin", "age": 18, "sex": "male"}
      for k, v in dic.items():
          print(k, v)
      
      '''06 dict的嵌套'''
      dic = {'name': 'alex',
             'name_list': ['wusir', 'taibai'],
             1: {'name': '日天'}}
      
      # 将wusir全部变成大写
      print(dic['name_list'][0])
      dic['name_list'][0] = dic['name_list'][0].upper()
      print(dic)
      
      # 将日天 改成 泰迪。
      dic[1]['name'] = '泰迪'
      print(dic)

          10.基础数据类型之可能遇到的坑

    • '''整体说明:
      01 tuple元组中如果只有一个元素没有逗号,则他不是元祖而是该元素对应的类型;有逗号则说明是tuple元祖类型。
      02  在 正向 循环一个list中,如果改变的列表的大小,若用for循环,则采用逆向倒序删除的方式进行删除。
      03 在循环一个字典时,不能改变该字典的大小,但是在不循环字典的时候可以改变字典的大小。
      '''
      
      # 01 tuple元组中如果只有一个元素没有逗号,则他不是元祖而是该元素对应的类型;有逗号则说明是tuple元祖类型。
      tu1 = (1)
      print(tu1, type(tu1))  # print(tu1, type(tu1))
      tu2 = ('alex')
      print(tu2, type(tu2))  # alex <class 'str'>
      tu3 = ([1, 2, 3])
      print(tu3, type(tu3))  # [1, 2, 3] <class 'list'>
      tu1 = (1,)
      print(tu1, type(tu1))  # (1,) <class 'tuple'>
      
      # fromkeys:将tuple元祖转换为字典
      dic = dict.fromkeys('abc', 'alex')
      print(dic)   # {'a': 'alex', 'b': 'alex', 'c': 'alex'}
      
      # 02 比较说明
      # == 比较的是两边的数值是否相同
      # is 比较的是内存地址是否相同
      # id 查询的是内存地址
      
      # 在 正向 循环一个list中,如果改变的列表的大小,那么结果可以和你预想的不一样。
      # 将索引为奇数位置的元素删除。
      # 第一种:按照切片(步长)的方式进行删除。
      l1 = [11, 22, 33, 44, 55, 66]
      del l1[1::2]
      print(l1)
      
      # 将索引为奇数位置的元素删除。
      # 第二种:利用for循环进行删除。
      
      #错误删除法:正向循环删除。
      l1 = [11, 22, 33, 44, 55, 66]
      for ind in range(len(l1)):
          print(ind, l1)
          if ind % 2 == 1:
              del l1[ind]
          print(ind, l1)
      print(l1)
      
      # 正确删除法:逆向倒叙删除
      l1 = [11, 22, 33, 44, 55, 66]
      for ind in range(len(l1)-1, -1, -1):
          if ind % 2 == 1:
              del l1[ind]
      print(l1)
      
      # 正确删除法:将原有的列表整体切片后,切片后形成行的列表即可进行循环和删除。********
      li = l1[:]
      for ind in range(len(li)):
          print(ind, li)
          if ind % 2 == 1:
              del l1[ind]
          print(ind, l1)
      print(l1)
      
      # 在循环一个字典时,不能改变该字典的大小。
      
      # 需求将字典中的key键含有'k'元素的所有键值对删除。
      
      dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'}
      
      # 错误示例:
      for i in dic.keys():
          if 'k' in i:
              del dic[i]
          print(dic)
      
      # 正确解析:
      l1 = []  # 定义一个空的列表
      for key in dic:
          if 'k' in key:
              l1.append(key)  # 将满足条件的添加至列表中
      # print(l1)
      for key in l1:  # 循环列表(列表可循环)
          del dic[key]  # 删除满足条件中的键值对
      print(dic)
  • 相关阅读:
    克隆对象和对象的继承
    面向对象的目的和方式
    补充+复习
    正则的一些细节和拖拽时遇到的问题及解决方法
    js高级正则解析
    正则理解
    如何判断this指向?
    动画以及运动
    元素节点
    null和undefined的区别
  • 原文地址:https://www.cnblogs.com/mayugang/p/9853347.html
Copyright © 2011-2022 走看看