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

    常见的基本数据类型:
    1. int 整数
    2. bool 布尔. 判断. if while
    3. str 字符串, 一般放小量的数据.
    4. list 列表. 可以存放大量的数据
    5. dict 字典, 以key:value的形式存储数据
    6. set 集合(数学)
    7. tuple 元组 不可变
    • int
      整数:可以 +、-、*、/、//、%、**运算
      bit_length() 一个数的二进制长度
    • bool
      类型转换
        字符串转换成整数 int(str)
        整数转换换字符串 str(int)
        结论: 想转化成xxx数据类型 xxx(目标)
        结论2: True => 1 False => 0
        结论3 , 可以当做False来用的数据: 0, "", [], (),{}, None 所有的空都是False
        所有的空的东西都是False
    • 字符串  字符:单一的文字符
        字符串:有序的字符序列
        字符串由' " ''' """ 括起来的内容叫字符串
        索引
          一排数字,反应第某个位置的字符 ,索引的下标从0开始,使用[]来获取数据
        切片:[start:end:step] 顾头不顾腚 最后一个取不到
            开始:结尾:步长
    s = '刘德华很帅但是张国荣更'
    print(s[2])
    print(s[11])
    print(s[-1]) # 倒数第一
    print(s[-4]+s[-3]+s[-2])
    View Code
      切片:[start:end:step]  顾头不顾腚 最后一个取不到
          开始:结尾:步长 step:步长.如果是+从左往右. 如果是-从右往左 每n个取1个
     1 s = '刘德华很帅但是张国荣更'
     2 #切片 s[start: end] 顾头不顾尾
     3 print(s[7:10])
     4 print(s[0:3])
     5 print(s[-4:-1])
     6 print(s[-1:-4]) # 默认的方向是从左往右切.
     7 #从德开始切. 切到结尾
     8 print(s[1:]) # 末尾
     9 print(s[:4]) # 开头
    10 print(s[:])
    11 
    12 
    13 s = "我要开始玩幺蛾子了你们怕不怕我很怕"
    14 print(s[1:5])
    15 print(s[5:1:-1])
    16 #第三个参数是步长
    17 print(s[1:5:3])
    18 print(s[4:8:2])
    19 
    20 s = "0123456789"
    21 print(s[::2]) # 02468
    22 print(s[-1:-6:-2])
    23 print(s[::-3])
    24 print(s[::-1])
    View Code
    常用操作方法:
       1. upper() 转化成大写. 忽略大小写的时候  lower小写
       2. strip() 去掉左右两端空白 用户输入的内容都要去空白
       3. replace(old, new) 字符串替换
       4. split() 切割 结果是list
       5. startswith() 判断是否以xxx开头 endseith 结尾
       6. find() 查找
       7. isdigit() 判断是否是数字组成
       8. len() 求长度. 内置函数

      1.大小写转来转去
     1 s = "abcd is not a good man! Mn is a good man"
     2 s1 = s.capitalize()  # 首字母大写
     3 print(s1)
     4 s2 = s.lower()
     5 s3 = s1.upper() # 转化成大写字母. 要求记住. 使用场景: 忽略大小写的时候需要
     6 print(s2)
     7 print(s3)
     8 
     9 
    10 s = "abcd is not a good man! Mn is a good man"
    11 s1 = s.swapcase()  # 大小写互换
    12 print(s1)
    13 
    14 s2 = "БBß" # 俄美德
    15 print(s2)
    16 print(s2.lower())
    17 print(s2.casefold()) # 都转化成小写. 支持的文字比lower多
    18 
    19 
    20 s = "class app_le banana ora1nge pear "
    21 s1 = s.title() # 标题.把单词的首字母大写
    22 print(s1)
    View Code
      2.切来切去
     1 s = "天然"
     2 s1 = s.center(4,"*") # 把字符串拉长成4个单位 用*扩充
     3 print(s1)
     4 
     5 s = " 	       你好啊. 我叫赛利亚       "
     6 print(s)
     7 s1 = s.strip() # 去掉空白
     8 print(s1)
     9 
    10 
    11 
    12 #模拟登陆
    13 #用户输入的内容是无法保证合法的. 需要进行处理和判断
    14 username = input("请输入用户名:").strip()
    15 password = input("请输入密码:").strip()
    16 if username == "alex" and password == "123":
    17     print("成功")
    18 else:
    19     print("失败")
    20 
    21 
    22 s = "你好啊跟你好"
    23 print(s.strip(""))
    24 
    25 
    26 
    27 s = "abs_wasd_rty_thon_evaj_eggon"
    28 # s1 = s.replace("rty", "try")
    29 s1 = s.replace("i", "SB", 2)
    30 print(s1)
    31 
    32 s = "abs_wasd_rty_thon_evaj_eggon"
    33 lst = s.split("_") # 刀有多宽 就要损失掉多少
    34 print(lst)
    35 
    36 
    37 
    38 s = "周润发周星驰周笔畅周杰伦"
    39 lst = s.split("周润发周星驰周笔畅周杰伦")  # 切割的内容在边上. 会出现空字符串
    40 print(lst)
    View Code
     3.格式化输出
    1 # 格式化输出
    2 print("我叫%s, 我今年%d岁了, 我喜欢干%s" % ("abs", 18, "python"))
    3 print("我叫{}, 我今年{}岁了, 我喜欢干{}".format("abs", 18, "python"))
    4 print("我叫{0}, 我今年{1}岁了, 我喜欢干{2}".format("abs", 18, "python"))
    5 print("我叫{name}, 我今年{age}岁了, 我喜欢干{hobby}".format(name="sbs", age=18, hobby="python"))
    View Code
    4.查找
    1 s = "今天的内容非常简单.你们信吗? 作业也很容易. 就是整理不太好"
    2 print(s.startswith("太好了"))
    3 print(s.endswith("太好了"))
    4              
    5 
    6 s = "胡辣汤炸鸡啤酒烤鸭酱肘锅包肉炸鸡炸鸡炸鸡"
    7 print(s.count("炸鸡")) # 计数
    8 print(s.find("疙瘩汤")) # 如果找不到返回-1  用这个
    9 print(s.index("疙瘩汤")) # 如果找不到报错.
    View Code
    5.条件判断
     1 s = "一二壹贰叁肆萬两"
     2 print(s.isnumeric())
     3 
     4 # 条件判断
     5 s14 = "123.16"
     6 s15 = "abc"
     7 s16 = "_abc!@"
     8 # 是否由字⺟和数字组成
     9 print(s14.isalnum())
    10 print(s15.isalnum())
    11 print(s16.isalnum())
    12 # 是否由字⺟组成
    13 print(s14.isalpha())
    14 print(s15.isalpha())
    15 print(s16.isalpha())
    16 # 是否由数字组成, 不包括⼩数点
    17 print(s14.isdigit())
    18 print(s14.isdecimal())
    19 print(s14.isnumeric()) # 这个⽐较⽜B. 中⽂都识别.
    20 print(s15.isdigit())
    21 print(s16.isdigit())
    View Code
    6.计算字符串的长度
    1 s = "我是上帝, 你也是上帝"
    2 print(len(s)) # 内置函数len(字符串) 返回给你字符串的长度
    View Code
    for循环
    我们可以使⽤for循环来便利(获取)字符串中的每⼀个字符
    语法:
      for 变量 in 可迭代对象:
        pass
        可迭代对象: 可以⼀个⼀个往外取值的对象
     1 s = "朱元璋朱棣"
     2 count = 0
     3 while count < len(s):
     4         print(s[coount])
     5         count += 1
     6 
     7 s = "朱元璋朱棣朱建峰"
     8 #for循环
     9 #for变量 in 可迭代对象:
    10 #把可迭代对象中的每一个元素 ,分别赋值给前面的变量,可以方便可迭代对象的遍历
    11 for c in s:
    12     print(s)
    13 
    14 
    15 了解一下  报错
    16 for i in 10:
    17     print(i)
    18 
    19 TypeError: 'int' object is not iterable
    20 错误类型:整数对象不能迭代
    View Code
    • list
      什么是列表
        能装东西的东西,列表中装的数据是没有限制的,32位 python可以存放: 536870912个元素,
    64位可以存放: 1152921504606846975个元素.大小基本上是够用的
      列表使用[]来表示. 在列表中每个元素元素之间用逗号隔开

      索引
        索引和切片参照字符串
        一排数字,反应第某个位置的字符 ,索引的下标从0开始,使用[]来获取数据
        切片:[start:end:step] 顾头不顾腚 最后一个取不到
           开始:结尾:步长

    1 lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"]
    2 print(lst[3])
    3 print(lst[-4])
    4 print(lst[-1][1:3])
    View Code

          切片:[start:end:step] 顾头不顾腚 最后一个取不到
        开始:结尾:步长 step:步长.如果是+从左往右. 如果是-从右往左 每n个取1个

    1 # lst = ["上海滩","西游记","家有儿女","奥特曼","包青天","少年包青天"]
    2 #  切片
    3 # print(lst[1:3]) # 切片出来的是列表.
    4 # print(lst[1:5:2])
    5 # print(lst[-1:-4:-2])
    View Code

    增删改查

      新增:

        1.append() 追加

        2.insert()  插入   

        3.extend() 迭代增加 

     1 # lst = []
     2 # lst.append("周杰伦") # 追加 在最后添加, 效率比较高
     3 # lst.append("周芷若")
     4 # lst.append("周公瑾")
     5 # print(lst)
     6 
     7 # lst = ["刘德华", "渣渣辉", "古天乐", "陈小春"]
     8 # lst.insert(2,"马德华")  # 插入, 可能会导致元素移动
     9 # print(lst)
    10 
    11 # lst = ["刘昊然", "张一山", "徐峥", "黄渤"]
    12 # lst.extend(["刘能", "赵四", "广坤"])
    13 # print(lst)
    View Code

      删除:

        1.remove()   指定元素

        2.pop()   弹 

        3.clear()   清空

        4.del     

     1 # 删除 pop, remove, clear, del
     2 # lst = ["刘能", "广坤", "皮长山", "大脚"]
     3 
     4 # lst.pop(2) # 可以指定元素删除(索引)
     5 # print(lst)
     6 # s1 = lst.pop() # 默认弹出最后一个
     7 # print(s1)
     8 # s2 = lst.pop()
     9 # print(s2)
    10 # print(lst)
    11 
    12 # lst.remove("广坤")
    13 # lst.remove("大脚")
    14 # print(lst)
    15 
    16 # lst = ["语文", "数学", "地理", "历史", "英语", "化学"]
    17 
    18 # lst.clear() # 清空
    19 
    20 # 可以切片删除
    21 # del lst[2]
    22 # del lst[0]
    23 # del lst[::2]
    24 # print(lst)
    View Code

       修改:

        索引修改

    1 # lst = ["功夫", "大话西游", "少林寺", "无间道", "战狼", "战狼2"]
    2 # # lst[2] = "西西里的美丽传说"
    3 # lst[-3] = "新世界"
    4 # lst[1:3] = ["一步之遥"]
    5 # lst[1:5:2] = ["胡辣汤", "烩面"] # 注意如果步长不是1. 那么元素的个数要匹配
    6 # print(lst)
    View Code

       查询:

       for el in list:

         print(el)

      

    # 列表是一个可迭代对象. 可以使用for循环
    # for el in list:
    #     print(el)
    View Code

    相关操作:

     1 lst = ["马化腾", "马云", "刘强东", "周鸿祎", "李彦宏", "马云", "马云"]
     2 print(lst.count("马云"))    #出现几次
     3 
     4 lst = [1.,15,55,54,5,9,64,4,6]
     5 lst.sort()   #正序
     6 lst.sort(reverse=True)  倒序排序
     7 
     8 lst.reverse()  翻转
     9 
    10 
    11 print(len(lst))   长度
    View Code

    嵌套

      

      元组和列表都可以进行嵌套

    1 # lst = ["周润发", "周星驰", "周笔畅", "周公瑾", ["九品芝麻官", ["吴孟达", "ads", "林雪"],"算死草", "赌侠", "赌圣", "整蛊专家"]]
    2 #
    3 # lst[4][1][1] = lst[4][1][1].capitalize()
    4 # print(lst)
    View Code
    • 元组

      不可变的列表,只读列表,由小括号()表示.元素与元素之间用逗号隔开,数据类型没有限制

      如果是空元组:tuple()

      一个元素(1,)

     1 # 清朝皇帝 (努尔哈赤, 皇太极, 顺治, 康熙, 雍正, 乾隆)  这些是不可变的  怎么都不会变的
     2 
     3 # huang = ("努尔哈赤", "皇太极", "顺治", "康熙", "雍正", "乾隆", "嘉庆", "道光", "光绪", "咸丰")
     4 # # huang[1] = "朱元璋" # 报错 'tuple' object does not support item assignment
     5 # print(huang)
     6 
     7 # 小括号在计算机里还表示算数优先级
     8 # print((8+3)*7)
     9 
    10 # tu = (1,) # 加了逗号, 就是元组了
    11 # tu = ("哈哈","呵呵","嘿嘿",)
    12 # print(type(tu))8
    13 # lst = list()  # []
    14 # tu = tuple()  # 空元组
    15 
    16 # 元组也有索引和切片 和列表一样和字符串也一样
    17 # tu = ("iphone", "nokia", "砸核桃", "Lenovo", "HTC", "Honor")
    18 # print(tu[-1])
    19 # print(tu[1:3])
    20 # print(tu[1:5:2])
    21 
    22 # 不可变指的是第一层元素不可变, 第二层取决于你的数据类型
    23 # tu = (1, 2, 5, ["胡辣汤", "滋滋冒油的大猪蹄子", "酱猪肘", "香喷喷的米饭", "脆皮炸鸡"])
    24 # tu[3].append("锅包肉")
    25 # print(tu)
    26 
    27 # tu = ("孙悟空", "白骨精", "哪吒", "二师兄", "妲己")
    28 #
    29 # for el in tu:  # element 元素
    30 #     print(el)
    View Code

    range

      

     1 #range()
     2  for i in range(100):   0-99
     3         print(i)
     4 
     5 for i in range(3,8):   34567   没有8     
     6     print(i)
     7 
     8 for i in range(5,10,2): 从5到10 步长是2
     9     print(i)
    10 
    11 
    12 # range(边界) 从0到这个边界
    13 # range(start, end) 从start到end结束. 不能到end
    14 # range(start, end, step) 从start到end. 步长是step
    15 
    16 
    17 lst = ["张无忌", "张三丰", "张翠山", "张一山", "张磊", "张伟", "张角"]
    18 for i in lst:
    19     print(i)                没有索引
    20 
    21 
    22 for i in  range(len(lst)):
    23     print(lst[i])              有索引
    24 
    25 tu = ("首页", "登录", "注册", "购物", "退出")
    26 for i in range(len(tu)):
    27         print(i,tu[i])
    View Code

    遍历列表的时候可以使用range

      for i in range(len(list))

        print(i,list[i])

    • 字典

    什么是字典 

       字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中.这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的. 

      已知的可哈希(不可变)的数据类型:int ,str,tuple,bool

      不可哈希(可变)的数据类型:list,dict,set

    语法 :

       {key1: value1, key2: value2....}

    注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

     1 # 合法 
     2 dic = {123: 456, True: 999, "id": 1, "name": 'sylar',"age": 18, "stu": ['帅哥', '美女'], (1, 2, 3): '麻花藤'} 
     3 print(dic[123])
     4 print(dic[True])
     5 print(dic['id']) 
     6 print(dic['stu']) 
     7 print(dic[(1, 2, 3)]) 
     8 # 不合法 
     9 # dic = {[1, 2, 3]: '周杰伦'}   # list是可变的. 不不能作为key 
    10 # dic = {{1: 2}: "哈哈哈"}     # dict是可变的. 不不能作为key 
    11 dic = {{1, 2, 3}: '呵呵呵'}    # set是可变的, 不不能作为key
    View Code

     dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽而hash表 不是连续的. 所以不能进行切片工作. 它只能通过key来获取dict中的数据

    字典的增删改查

    增加

    dict[新key] = value
    dict.setdefault()
     1 dic = {}
     2 dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀个key-value的组
     3 合进dict
     4 dic['age'] = 18
     5 print(dic)
     6 # 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值
     7 dic.setdefault('李嘉诚') # 也可以往⾥⾯设置值.
     8 dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会
     9 起作⽤
    10 print(dic)
    11 
    12 # dic = {}
    13 # # 徐峥:人在囧途
    14 # dic['徐峥'] = "人在囧途" # 直接用key往里面存数据即可
    15 # dic['黄渤'] = "疯狂的石头"
    16 # dic["王宝强"] = "天下无贼"
    17 # dic["王宝强"] = "士兵突击" # 如果key已经存在。 那么会替换掉原来的value, 修改
    18 #
    19 # dic.setdefault("黄秋生")
    20 # dic.setdefault("黄秋生", "无间道")    # 如果存在了key, 不会执行新增
    21 #
    22 # print(dic)
    View Code

    删除

    pop(key)
    popitem()
    clear()
    del dict[key]
    1 dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"}
    2 # dic.pop("吕颂贤") # 指定key删除
    3 # dic.popitem()  # 随机删除
    4 # del dic["黄日华"]  # 删除
    5 # dic.clear() # 清空字典
    6 
    7 print(dic)
    View Code

    修改

    dic[key] = 新值
    update()
    查询
    1. 用key直接查询 dict[key]
    2. get(key, 如果key不存在返回的数据)
    3. setdefault() 1. 执行新增流程. 2. 查询结果
     
     1 dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"}
     2 # dic['王木生'] = "刘伟"
     3 dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"}
     4 dic.update(dic2)
     5 print(dic)
     6 
     7 # 查询
     8 dic = {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}
     9 # 1. 最直观。 直接用key
    10 print(dic['周杰伦'])  # 当这个key不存在的时候会报错
    11 # 2. get方法
    12 print(dic.get("谢大脚", "周杰伦不在这里"))  # 没有key. 返回None
    13 # 3. setdefault()  1. 新增(先看有没有key, 如果有就过, 如果没有,执行新增) 2.根据key把值返回
    14 dic = {}
    15 dic["盖伦"] = "德玛西亚之力"
    16 value = dic.setdefault("菲奥娜", "无双剑姬")  # 新增
    17 value2 = dic.setdefault("盖伦", "刘伟")  # 由于已经存在了key。 所以新增不执行。 直接查询结果
    18 value3 = dic.setdefault("薇恩", "")
    19 
    20 print(value3)
    21 print(dic)
    View Code

    相关操作

     1 dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}
     2 
     3 # 对字典的遍历
     4 # print(dic.keys())   # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表
     5 # for key in dic.keys():
     6 #     print(key)  # 拿到key
     7 #     print(dic[key]) # 拿到value
     8 
     9 # print(dic.values())
    10 # for value in dic.values():
    11 #     print(value)
    12 
    13 
    14 # 也可以遍历字典
    15 # [('汪峰', '大陆音乐半壁江山'), ('周杰伦', '亚洲音乐天王'), ('罗志祥', '亚洲舞王')]
    16 # print(dic.items())  # 拿到的是key和value
    17 for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.
    18     print(k) # 元组
    19     print(v)
    20 
    21 
    22 # 字典本身是一个可迭代对象,可以直接进行for循环
    23 for el in dic:  # 直接拿到key
    24     print(el)
    25     print(dic[el])
    26 
    27 # 前面的变量的个数和后面解包的个数一致
    28 # a, b = (10, 20) # 解构, 解包
    29 # print(a)
    30 # print(b)
    View Code

    字典的嵌套

     1 wf = {
     2     "name": "汪峰",
     3     "age": 48,
     4     "成名曲": "春天里",
     5     "wife": {
     6         "name": "章子怡",
     7         "age": 39,
     8         "工作": "演员"
     9     },
    10     "children":[
    11         {"num": "001", "name": "汪一", "hobby": "唱歌"},
    12         {"num": "002", "name": "汪二", "hobby": "演戏"} # wf['children'][1]['name']
    13     ]
    14 }
    15 
    16 # wf['wife']['age'] = wf['wife']['age'] + 10
    17 # print(wf)
    View Code
  • 相关阅读:
    影响Scala语言设计的因素列表
    mysql查询不区分大小写问题分析和解决
    mysql基础之三:char与varchar区别,varchar(M)能存多少
    Springboot Actuator之三:spring boot健康检查对Redis的连接检查的调整
    nginx实现带参数目录域名重定向二级域名方法
    Nginx正则表达式之匹配操作符详解
    微服务API网关 vs. 传统企业级API网关
    无法打开SQL Server的连接
    URAL 1146 Maximum Sum(最大子矩阵的和 DP)
    leetCode 70.Climbing Stairs (爬楼梯) 解题思路和方法
  • 原文地址:https://www.cnblogs.com/Majintao/p/9599968.html
Copyright © 2011-2022 走看看