• python中的数据类型与基本语法操作


    Python3 中有六个标准的数据类型:

    • Number(数字)
    • String(字符串)
    • List(列表)
    • Tuple(元组)
    • Set(集合)
    • Dictionary(字典)

    【0】数据类型脑图

      

    【1】字符串

    字符串不可以修改,直接修改操作其实是新赋值了一个字符串给它

    【1.0】字符串函数

    # Auth chaoqun.guo
    name = "my name is alex"
    print(name.capitalize()) # 首字母大写
    print(name.count('a'))  # 统计出现的次数
    print(name.center(50, '-'))  # 占50个字符宽度,且把 name 字符串对于这50个字符串的宽度居中,如果name字符串不足50,则用 '-' 填充
    print(name.endswith("ex"))  # 判断字符串结尾的字符是不是 ex
    print(name.expandtabs(tabsize=30)) # 把 	 制表符换成30个字符大小
    print(name.find("name"))  # 从左往右,获取字符串首字母的第一次出现的位置下标,方便切片
    print(name.find("name"))  # 从左往右,获取字符串中最后一次出现 name 的首字母位置
    print(name.format(name='alex',year=23))  #format函数,这里不特意讲了
    print('ab23'.isalnum())        # 是否是一个 阿拉伯数字、字母,
    print('abA'.isalpha())         # 是否是一个 纯字母字符串
    print('1.22222'.isdecimal())   # 是否是一个 十进制
    print('12'.isdigit())          # 是否是一个 证书
    print('1a'.isidentifier())     # 是否是一个 合法的变量名(中文做变量名也是可以的哦)
    print('aa'.islower())          # 是否是一个 小写字符串
    print('aa'.isupper())          # 是否是一个 大写字符串
    print('aa'.isspace())          # 是否是一个 空格
    print('Aa Bb'.istitle())       # 是否是一个 标题,即每个单词首字母大写
    print('hello world'.title())   # 把它变成一个 标题(即每个单词首字母大写),结果:Hello World
    print('-'.join(['a', 'b', 'c'])) # 把列表、或者多个字符串合并成一个字符串,以 '-' 为合并分隔符每一个元素或字符  a-b-c
    print('-'.join('aaaaaa'))        # 把列表、或者多个字符串合并成一个字符串,以 '-' 为合并分隔符每一个元素或字符  a-a-a-a-a-a
    print('name'.ljust(5, '*'))      # 保证字符串长度为5,如果不够则左边补全 *,同理 rjust 是一样的效果
    print(' aaa bbb '.strip())       # 去掉字符串左右两边的空格和换行,相当于 trim
    print(' aaa bbb '.lstrip())      # 去掉字符串左边的空格和换行,相当于 ltrim ,同理 rstrip() 也是一样的效果
    
    p = str.maketrans('abed', '1234')  # 构造字符映射规则,用后面的去替换映射前面的字符,要一一对应
    print('aqwcc'.translate(p))        # 应用字符映射规则,结果:1qw33
    print('aabc'.replace('a', 'A'))    # 替换a 为 A,如果只想替换 1个则可以 print('aabc'.replace('a', 'A',1))
    print('1+2+3+4'.split('+'))        # 根据某个字符或字符串分割字符串,结果以列表存储:['1', '2', '3', '4']
    print('1+2
    +3+4'.splitlines())    # 根据换行符 分割字符串,结果是列表:['1+2', '+3+4']
    print('aAaA'.swapcase())           # 把字符串中字符大小写互换,结构:AaAa
    print(' ni hao '.zfill(50))        # 0填充

    【1.1】字符串:最佳实践

    字符串或串(String)是由数字、字母、下划线组成的一串字符。

    切片截取规则:

      

     实例:

      

         

         

    【1.2】Bytes

    python3,文本总是Unicode,由str组成;二进制则由 bytes类型表示;

    python3 中不会以任何隐式的方式混用 str 和 bytes。

      不能拼接字符串和字符包,也无法再字节包里搜索字符串(反之亦然)

    【1.3】Str 与 Bytes 互相转换

    什么情况下,Str 需要转换成 Bytes呢?在python3中 做socket 编程的时候;

    bytes 转 Str=》decode

    Str 转 bytes=》encode

    实践:

    msg="我爱中国"
    print(msg.encode('utf8'))  # 不写默认是utf-8 编码
    print(msg.encode('utf8').decode(encoding='utf-8'))  # 不写默认是utf-8 编码

      

    【2】列表 :使用 []

    有序,可增删改查

    【2.1】列表:基本使用命令

    # Auth chaoqun.guo
    name = ["张三","李四","王五"]
    # 切片
    
    print(name)
    print(name[0])    # 获取第1个元素
    print(name[0:3])  # 获取1-3下标的元素
    print(name[-1])   # 获取最后一个下标的元素
    print(name[::-1]) # 获取 所有倒序输出的元素
    print(name[::2])  # 获取 从0开始命中之后,再步长为2的下标元素,结果是 name[0],name[2]
    
    # 列表的 增删改查
    name.append("赵6")   # 增:在列表最末尾追加元素
    name.insert(1,"郭7") # 增:在指定下标位置添加元素,后续的会依次后推一个位置,一次只能插入一个
    print(name * 4)      # 增: 所有元素乘以4倍,如[1,2] 变成[1,2,1,2,1,2,1,2]
    # 浅copy,主要作用是建立联合账户,比如夫妻共用一张银行卡 name1 = name.copy() # 增: 复制一个新列表出来,且第一层原列表修改不影响新列表,第二层(比如嵌套列表,它存的只是一个指针)原列表被修改那么也会被修改;用copy.deepcopy(name) 解决 n1 = name[:] #浅copy 其他办法 n2 = list(name) #浅copy 其他写法
    n3 = copy.copy(name) #浅copy 其他写法
    name2
    = copy.deepcopy(name) # 增:完全复制一个独立的新列表出来,需要import copy name3 = name # 增: 新建一个变量指针指向相同列表地址,原列表name修改,name3也会被修改 name[2]="我是周2啊" # 改:直接修改指定下标的值 name.reverse() # 改:元素下标倒序列表 name.sort() # 改:ASCII规则排序 name.sort(reverse=True) # 改:倒序 ASCII规则排序 name.remove("我是周2啊") # 删:删除 del name[1] # 删:删除 name.pop() # 删:默认删除最后一个,如果写下标1,那就和 del name[1] 一样了 print(name.index("张三")) # 查:查看元素的下标,如果有多个就只显示最前面第1个找到 print(name.count("张三")) # 查:查看元素在列表中的个数 print("张三" in name) # 查:查看元素是否在 列表中

    【2.2】列表:实践演示

        

        

        

    【3】数字

    Python支持四种不同的数字类型:

    • int(有符号整型)
    • long(长整型[也可以代表八进制和十六进制])
    • float(浮点型)
    • complex(复数)

    实例

      

     实践:

     

    【4】元组:使用 ()

    可以理解成不能修改的列表

      

    【5.1】set集合:用 {}

    # Auth chaoqun.guo
    list_1 = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
    list_1 = set(list_1)  # 把列表转换成集合,以此来去重
    list_2 = set([1, 3, 5])
    
    # 并交差集,子集,对称差集
    print(list_1.intersection(list_2))  # 交集
    print(list_1.union(list_2))         # 并集
    print(list_1.difference(list_2))    # 差集,即在 list1中去掉所有与 list2 有交集的元素
    print(list_1.issubset(list_2))      # 判断 list1 是否是 list2的子集,结果:False
    print(list_1.issuperset(list_2))    # 判断 list1 是否是 list2的父集,结果:True
    print(list_1.symmetric_difference(list_2))  # 对称差集,即取双方并集,但又减去双方交集
    print(list_1.isdisjoint(list_2))            # 判断list1 与list2 是否没有交集,如果没有交集返回 True,有交集返回 False
    
    # 符号表示
    print(list_1 & list_2)  # intersection
    print(list_1 | list_2)  # union
    print(list_1 - list_2)  # difference
    print(list_1 ^ list_2)  # symmetric_difference
    print(list_1 <= list_2)  # issubset
    print(list_1 >= list_2)  # issuperset
    
    # 增删改查
    list_1.add(999)            # 增加:增加元素
    list_1.update([10,20,30])  # 增加:在list_1中添加多个元素
    list_3 = list_1.copy()     # 增加:浅复制
    list_1.remove(999)         # 删除:删除集合中的指定元素,如果指定元素不存在则会报错
    list_1.pop()               # 删除:删除任意一个集合元素,如果输出该表达式,会输出被删除的值
    list_1.discard('a')        # 删除:删除集合中的指定元素,如果不存在则为None
    print(len(list_1))         # 查询:查看集合元素个数
    print(10 in list_1)        # 查询:某个元素值 是否存在于集合
    print(10 not in list_1)    # 查询:某个元素值 是否不存在于集合

      

    【5.2】字典:用{key:value}

    【5.2.1】基本操作

    特性:无序,key 唯一

    # Auth chaoqun.guo
    
    info = {
        'stu1': "zhang san",
        'stu2': "li si ",
        'stu3': "wang wu"
    }
    # 增删改查
    
    info["stu1"] = "张三"  # 增改:存在即修改,不存在则添加
    del info["stu2"]      # 删除:key
    info.pop("stu2")      # 删除:Key
    info.popitem()        # 删除:任意删一个KV
    
    print(info)            # 查询:获取所有的KV
    print(info["stu2"])    # 查询:获取K 对应的V,如果不存在则报错
    info.get("stu2")       # 查询:获取K 对应的V,如果不存在则输出 None
    print("stu2" in info)  # 查询:判断K 是否在该字典中,如果存在则 True 否则 False
    info.values()          # 查询:打印所有的 Value
    info.keys()            # 查询:打印所有的 Key
    info.setdefault("stu4", "zhao liu")  # 查询/新增:如果key 存在则查询,否则新建该key 然后查询该Key对应value
    
    info = {'stu1': "zhang san",   'stu2': "li si ",   'stu3': "wang wu"}
    info1 = {"stu1": "gg",    "stu4": "gg",    "stu5": "gg"}
    info.update(info1)     # 修改:把info中的信息 修改成info1的,有交集的直接替换,没交集的则插入
    info.items()           # 修改:把一个字典转换成列表,每一个KV键值对就是一个列表元素
    print( dict.fromkeys([4, 5, 6], "test") )  # 初始化,初始化一个字典,默认值为"test" ,输出:{4: 'test', 5: 'test', 6: 'test'}
    q = dict.fromkeys([4, 5, 6], ["aa", "bb", {"name": "gg"}])   # 多层初始化不要用,修改一个所有元素都会被修改
    print(q)
    q[6][2]["name"]= "aa"
    print(q)   #  输出结果: {4: ['aa', 'bb', {'name': 'aa'}], 5: ['aa', 'bb', {'name': 'aa'}], 6: ['aa', 'bb', {'name': 'aa'}]}
    
    #
    嵌套 可以嵌套任意数据类型 info = { "一中": {"1班人数": 30, "2班人数": 20, "3班人数": 10}, "四中": {"1班人数": 15, "4班人数": 25, "7班人数": 33}, "六中": {"2班人数": 26, "5班人数": 32, "7班人数": 12}, } # 循环遍历字典 for i in info: # 该办法效率高很多 print(i, info[i]) for k, v in info.items(): print(k, v) 

    【5.2.2】三级菜单案例

    # 三级菜单
    data = {
        '湖南省': {
            '长沙市': {
                '岳麓区': '我们这里有岳麓山啊',
                '芙蓉区': '我们这里有芙蓉广场啊'
                },
            '永州市': {
                '东安区': '我们这里有好吃的东安鸡啊',
                '祁阳县': '我们这里有好吃的炒血鸭啊'
                }
        },
            '广东省': {
                '深圳市': {
                    '南山区': '我们这里有腾讯啊',
                    '龙岗区': '我们这里有华为啊'
                },
                '广州市': {
                    '天河区': '我说我这里有广州塔,你信吗?',
                    '白云区': '我们这里有4399游戏公司,你信吗?'
                }
    
        }
    
    }
    exit_flag = False
    while not exit_flag:
        for i in data:
            print('1', i)
        choice = input("选择进入省>>(b返回,q退出):")
        if choice in data:
            while not exit_flag:
                for i2 in data[choice]:
                    print("	2.",i2)
                choice2 = input("选择进入市>>(b返回,q退出):")
                if choice2 in data[choice]:
                    while not exit_flag:
                        for i3 in data[choice][choice2]:
                            print("		3.", i3)
                        choice3 = input("选择进入区(b返回,q退出)>>:")
                        if choice3 in data[choice][choice2]:
                            print(data[choice][choice2][choice3])
                        elif choice3 == 'b':
                            break
                        elif choice3 == 'q':
                            exit_flag = True
                        else:
                            print("您输入的名称不存在,请查看列表重新输入~~")
    
                elif choice2 == 'b':
                    break
                elif choice2 == 'q':
                    exit_flag = True
                else:
                    print("您输入的名称不存在,请查看列表重新输入~~")
        elif choice == 'b':
            break
        elif choice == 'q':
            exit_flag = True
        else:
            print("您输入的名称不存在,请查看列表重新输入~~")

    结果:

      

    【5.2.3】基本概念

       

    【6】python中的常用操作

    【6.1】python中的多行语句

    使用,()、[]、{} 也可以达到这个效果

      

    【6.2】python中的注释

    ### python中的注释
    单行注释 #
    多行注释
    (1)''' 内容 '''
    (2) """ 内容 """

    # 第一个注释
    print ("Hello, Python!")  # 第二个注释
    '''
    这是多行注释,使用单引号。
    这是多行注释,使用单引号。
    这是多行注释,使用单引号。
    '''
    
    """
    这是多行注释,使用双引号。
    这是多行注释,使用双引号。
    这是多行注释,使用双引号。
    """

    【6.3】print输出,不换行输出

      

    【6.4】设置字符编码

    ### 字符编码
    1. # coding: UTF-8

    【6.5】导入库 import

    import 与 from...import

    在 python 用 import 或者 from...import 来导入相应的模块。

    将整个模块(somemodule)导入,格式为: import somemodule

    从某个模块中导入某个函数,格式为: from somemodule import somefunction

    从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

    将某个模块中的全部函数导入,格式为: from somemodule import *

    关于 import 的小结,以 time 模块为例:

    1、将整个模块导入,例如:import time,在引用时格式为:time.sleep(1)。

    2、将整个模块中全部函数导入,例如:from time import *,在引用时格式为:sleep(1)。

    3、将模块中特定函数导入,例如:from time import sleep,在引用时格式为:sleep(1)。

    4、将模块换个别名,例如:import time as abc,在引用时格式为:abc.sleep(1)。

    【6.6】类型转换

    当字符串内容为浮点型要转换为整型时,无法直接用 int() 转换:

    a='2.1'  # 这是一个字符串
    print(int(a))

    会报错 "invalid literal for int() "

    需要把字符串先转化成 float 型再转换成 int 型:

    a='2.1'
    print(int(float(a)))

    【6.7】format

    (1)不写参数,用位置对应

    a='gg'
    b=25
    print('my name is {},I am {} years old'.format(a,b))

    my_list = ['菜鸟教程', 'www.runoob.com']
    print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

      

    写参数,赋值对应

    username='a'
    password='b'
    info=''' info of {name}
    --username:{name}
    --password: {pwd}
    '''.format(name=username,pwd=password)
    print(info)

      

    【6.8】格式化赋值

    username='a'
    password='b'
    info='''
    --username:%s
    --password: %s
    ''' %(username,password)

      

    【6.9】三元运算赋值(result = a if a>b else c)

    a,b,c = 1,3,5
    result = a if a>b else c
    print(result)

    结果: 5

    【6.10】设置文件编码格式 

    三种方式:

    1.# -*- coding: <encoding name> -*- : # -*- coding: utf-8 -*-
    2.# coding=<encoding name>  : # coding=utf-8
    3.# coding:<encoding name> : # coding: utf-8

    【6.11】生成器( b = [i*2 for i in range(10)] )

    【总结】

    (1)字符串、数字不可以修改 

      如下,我们可以看到,虽然赋值成功了,但是已经不是同一个ID值了,变量其实是一个指针,指向了这个内存中生成的固定字符串而已

        

      然后,我们的不可更改就如下面

        

    (2)列表可以增删改查

      如下图,演示了增删操作;还有appen 可以在末尾追加

        

    (3)元组 tuple 是只读的

  • 相关阅读:
    常见限流算法
    spring aop 事物
    Java序列化和反序列化为什么要实现Serializable接口
    java类在何时被加载?
    mysql 排序 是怎么工作的?
    程序员转正述职报告
    .NET中使用Channel<T>
    .NET-服务承载系统(Hosting)(支持Cron表达式)
    JObject拼接Json字符串
    NET5 使用FTP发布
  • 原文地址:https://www.cnblogs.com/gered/p/13258552.html
Copyright © 2020-2023  润新知