• Python基本数据类型


    1. 整型(int)

    1.1 其它类型转换为整型

    可以通过 type() 来查看变量到底是什么类型

    # 布尔值转整型
    n1 = int(True)  # True转换为整数 1
    n2 = int(False) # False转换为整数 0
    # 字符串转整型 v1 = int("186", base=10) # 把字符串看成十进制的值,然后再转换为 十进制整数,结果:v1 = 186 v2 = int("0b1001", base=2) # 把字符串看成二进制的值,然后再转换为 十进制整数,结果:v1 = 9 (0b表示二进制) v3 = int("0o144", base=8) # 把字符串看成八进制的值,然后转换为 十进制整数,结果:v1 = 100 (0o表示八进制) v4 = int("0x59", base=16) # 把字符串看成十六进制的值,然后转换为 十进制整数,结果:v1 = 89 (0x表示十六进制)

    1.2 Py2和Py3的差异

    Python2中有int、long(长整型),长整型都以L结尾 

    • int,可表示的范围:-9223372036854775808~9223372036854775807
    • long,整数值超出int范围之后自动会转换为long类型(无限制)

    Python3中只剩下:int(整型),并且 int 长度不在限制

    python2中两个值相除时,默认进行地板除,只保留整数位(python3中默认会保留小数)

    2. 布尔值(bool)

    布尔值详细内容

    布尔值True和False的判断

    • 整数0、空字符串、空列表、空元祖、空字典转换为布尔值时均为False
    • 其他均为True

    3. 字符串(str)

    3.1 可变类型和不可变类型

    可变数据类型:在python中定义一个变量,当变量值被修改后,内存地址没有改变,则该数据定义为可变数据类型。(可以用id来查看)

    不可变数据类型:当变量的值被修改后,变量的内存地址发生变更(创建了新对象),则认为该类型为不可变数据类型。

    3.2 字符串处理的相关方法

    1)大小写相关,得到的都是一个新的字符串

    • swapcase()
    • upper()
    • lower()
    • casefold()
    • title()
    • capitalize()

    2)开头结尾字符判断,得到一个布尔值

    • endswith()
    • startswith()

    3)去除字符串两边的内容,得到一个新的字符串

    • strip()

    4)查找统计

    • find()
    • index()
    • count()
    • len()

    5)替换分割

    • replace()
    • partition()
    • split(),字符串切割,得到的是一个列表
    • splitlines()
    • join()

    6)类型判断,返回布尔值

    • isdigit()
    • isalpha()
    • isalnum()
    • isspace()

    7)其他

    • expandtabs(15)
    • range(0,20,2)

    3.3 字符串处理代码示例代码

    name = "   hgAlexHgzero 
     wuzhihao   "
    
    print("大小写转换效果:")
    print(name.capitalize())                  # 首字母大写
    print(name.swapcase())                    # 将字符串中的大小写互换
    print(name.title())                       # 字符串中的每个单词首字母大写
    print(name.upper())                       # 全部变大写
    print(name.lower())                       # 全部变小写,只能转换26个英文字母
    print(name.casefold())                    # 更为牛逼的全部变小写,不光支持26个英文字母,还支持其他非字母
    print("*"*80)
    
    print("判断开头结尾:")
    print(name.endswith("zero"))              # 判断是否以zero字符串结尾
    print(name.startswith("hg"))              # 判断是否以hg字符串开头
    print("*"*80)
    
    print("strip效果:")
    print(name.strip())                       # 剔除字符串两端的空白
    print(name.rstrip())                      # 剔除字符串右边的空白
    print(name.lstrip())                      #剔除字符串左边的空白
    print("*"*80)
    
    print("查找find和index :")
    print(name.find("A"))                     # 查找A,返回其索引,若找不到,则返回-1
     # index 和 find 都有从左和从右开始找的方法,rfind() lfind()  rindex() lindex()
    print("index为:",name.index("A"))        # 返回字符串的索引值,若找不到则返回错误
    
    print("统计数量")
    name.count("hgzero",3,9)                  # 在3到9的位置计数hgzero出现的次数
    print("*"*80)
    
    print("特殊效果:")
    print(name.center(50,"*"))                # 将字符串放于50个字符内容的中间,其他空缺内容用*符号补充
    print(name.ljust(20,"-"))                 # 占用20个字符串空位,name字符串靠左,未填满则用-补充
    print(name.rjust(20,"-"))                 # 与ljust类似,name字符串靠右
    print(name.zfill(20))                     # 占用20个字符串空位,name字符串未占用的空位则在前面补0
    print("*"*80)
    
    print("replace效果:")
    print(name.replace("zero","Wuzhihao"))    # 用第二个参数来替换第一个参数,但是不会改变原来的字符串,只作为一次结果
    # replace()的第三个参数表示要替换的次数,若不指定则表示替换所有
    print("*" * 80)                           # 可用变量来接受这一次的结果
    
    print("partition效果:")
    print(name.partition("zero"))             # 以zero将整个字符串分成3部分   zero前,zero,zero后   保存为列表
    print("*"*80)
    
    print("split效果:")
    print(name.split("H"))                    # 按照H字符将整个字符串进行切割,切割后H字符消失,切割后内容保存为列表形式
    print(name.splitlines())                  # 按照行分隔,返回一个包含各行作为元素的列表,按换行来切割
    print("*"*80)
    # 注意,split()不加参数默认以空格切割,加参数不能为空,就是说貌似split不能对asdfadf这样的字符串进行每个字符的切割
    
    print("join效果:")
    b = "-"
    print(b.join(name))                       # 将字符串b 插入到字符串变量name中的每个字符之间,形成一个新的字符串
    print("*".join(name))
    print("*"*80)
    
    print("字符串类型判断:")
    print(name.isdigit())                     # 判断所有字符是否是字符
    print(name.isalpha())                     # 判断所有字符是否为字母
    print(name.isalnum())                     # 判断所有字符是否为数字和字母的组合
    print(name.isspace())                     # 判断是否为纯空格
    print("*"*80)
    
    print("expandtabs方法的使用:")
    like = "name:wuzhihao	age:20	addr:China	"
    print(like.expandtabs(15))               # 每次以15个字符位为一单位,直至出现	 ,每一单位中的除了字符串的空白位用空格填充
    
    print("    7个基本魔法:join() , split() , find() , strip() , lower() , upper() , replace()   ")
    print("
    "*3)
    
    love = "I love you forever"
    print(len(love))                          # 获取字符串的长度
    print(love[4])                            # 通过下标的方法截取字符串
    print(love[2:6])                          # 通过切片的方式截取字符串
    
    print("range方法")
    print(range(0, 20, 2))                      # 以2为步长(每隔一个数),打印在0到20的范围内(不包括20)的值
    # python2中range方法立即创建,而python3中range只在要循环迭代的时候才创建

    3.4 字符串的其他内容

    1)字符串拼接

    2)字符串格式化

    4. 列表(list)

    4.1 列表类型说明

    列表为可变数据类型,且列表是有序的。

    • 可变数据类型(mutable):列表、字典、集合。
    • 不可变数据类型(unmutable):数字、字符串、元组。

    可迭代对象:字符串、列表、元组、字典、集合。

    4.2 列表的常用方法

    1)切片

    • name[0:4],name[0:4:2],name[:4],name[1:],name[:-1]

    2)增加

    • append()
    • insert()

    3)扩展

    • extend()

    4)删除

    • del  name[2]
    • remove()
    • pop()

    5)修改

    • name[2]='two'
    • name[3:6]=['first','second','third']

    6)查找、统计

    • index()
    • count()

    7)排序、翻转

    • sort()
    • reverse()

    8)深浅copy(要导入copy模块)

    • copy()
    • deepcopy()

    4.3 深浅copy

    1)浅拷贝

    对可变对象而言,对象的值一样可能包含有其他对象的引用;浅拷贝产生新的对象,虽然具有完全不同的id,但是其值若包含可变对象,这些对象和原始对象中的值包含同样的引用。

    也就是说,浅拷贝只拷贝了一层,若子层内还有其他引用,则只拷贝引用的链接。

    2)深拷贝

    深拷贝不仅仅拷贝了原始对象自身,也对其包含的值进行拷贝,它会递归的查找对象中包含的其他对象的应用,来完成更深层次拷贝。

    深拷贝产生的副本可以随意修改而不需要担心引起原始值的改变。

    import copy
    
    a = copy.copy(b)      # 对b进行浅copy后赋值给a,浅拷贝
    c = copy.deepcopy(d)  # 深拷贝
    
    # copy.copy()  浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
    # copy.deepcopy()  深拷贝 拷贝对象及其子对象
    
    v = names.copy()
    print(v)

    4.4 列表常用方法示例代码

    names = ['hgzero', 'wuzhihao', 'zero', 'wuzhihao', 'hg', 'hao']
    
    print("切片操作")
    print(names[0:4])                        # 列表的切片操作不包括最后一个值
    print(names[0:4:2])                      # 切片的第三个参数代表 每隔1个数取一个值
    print(names[:4])
    print(names[1:])
    print(names[:-1])                        # 取值不包括最后一个值
    print("#" * 50)
    
    print("三种增加的方法:")
    print("追加")
    names.append("wu")                       # 在列表尾部追加
    names.append("zhi")
    names.append("hao")
    print(names)
    print("插入")
    names.insert(2, "插入的值")              # 在2索引的位置插入要添加的值
    print(names)
    print("扩展")
    b = [1, 2, 3, 5, 9, 7, 8]
    names.extend(b)                         # 将b列表合并到names列表中(尾部添加),形成一个新的列表
    print(names)
    
    print("三种删除的方法")
    del names[2]
    del names[3:5]
    print(names)
    names.remove("hgzero")                  # 删除指定的元素
    print(names)
    names.pop()                             # 删除列表的最后一个值并返回删除的值,也可加上参数表示删除指定的索引的值并返回删除的值
    print(names)
    
    print("修改")
    names[2] = "修改的值"
    names[3:6] = ["first", "second", "thrid"]    # 批量修改
    print(names)
    
    print("获取下标")
    print(names.index("wuzhihao"))          # 只返回找到的第一个下标
    
    print("统计")
    print(names.count("wuzhihao"))
    
    print("排序和翻转")
    b.sort()     # 排序
    print(b)
    b.reverse()  # 反转
    print(b)print("清空")
    names.clear()
    print(names)

    5. 元组(tuple)

    5.1 元组类型说明

    元组和列表差不多,但是元组一旦创建,就不能再修改(增加、修改、删除),所以元组又叫只读列表

    元组不能修改的只是元组的一级元素,但是一级元素中的内容可以修改。

    • 元组的末尾最好加上一个逗号。
    • 元组为可迭代对象,所以可以被迭代方法进行迭代处理。
    • 元组是有序的。

    5.2 元组的处理

    1)元组和列表的转换

    ls = list(names)   # 转换为列表
    print(ls)
    tu = tuple(ls)     # 转换为元组
    print(tu)

    2)切片:和列表一样

    3)方法:

    • len()
    • count()
    • index()

    5.3 元组常用方法示例代码

    # 元组和列表差不多,但是元组一旦创建,便不能再修改(增加、修改、删除),所以又叫只读列表
    # 元组和列表可以互换   list()   tuple()
    
    # 元组的末尾最好加上一个逗号
    names = ("hgzero","wuzhihao","zero","wuzhihao",)
    (hgzero,)
    
    print("元组的切片")
    print(names[1:3])
    
    print("元组和列表的转换")
    ls = list(names)
    print(ls)
    tu = tuple(ls)
    print(tu)
    
    print("元组只有2个查的方法,一个是count,另一个是index")
    print(names.count("wuzhihao"))
    print(names.index("zero"))
    
    print("元组为可迭代对象")
    print("*".join(names))         # 当元组中全部为字符串时,可以用join方法来转换
    
    print("元组是有序的")
    tu = (111,"alex",(11,22),[(33,44)],True,33,55)
    print(tu[3][0][0])
    
    print("元组的不能修改只是针对元组的一级元素,但一级元素中的内容可用修改")
    tu[3][0]="wuzhihao"
    print(tu)

    6. 字典(dict)

     6.1 字典类型说明

    字典存储为键值对形式,且字典是无序的。

    字典的键(key)必须是唯一的

    • key必须可哈希,且key必须为不可变数据类型;
    • 布尔值可以作为字典的key;

    6.2 字典的处理方法

    1)获取所有的键&值

    • xx_dick.keys()       返回为一个高仿列表;
    • xx_dick.values()    返回为一个高仿列表;
    • xx_dick.items()      获取字典中所有的键、值,返回为一个个元组,包含在一个高仿列表中;

    2)增加&修改&更新

    • info['stu4'] = 'hgzero'
    • info['stu4']='Tom'
    • update({"name": "hgzero", "age": 18})

    3)删除

    • del info['stu4']
    • pop('stu4')

    4)查找

    • 'stu1' in info
    • get()
    • info['stu1']

    5)其他

    • setdefault()

    6.3 字典使用示例代码

    # 字典存储为 键值对 形式
    # 字典dick  是无序的
    info = {
        "stu1": "hg zero",
        "stu2": "wu zhihao",
        "stu3": "hao wu",
    }
    
    print("增加:")
    info['stu4'] = "wuzhihao"
    print(info)
    
    print("字典的扩展:")
    b = {"A": 1, "B": 2, "C": 3}
    info.update(b)                         # 将b字典中的内容扩展到info中
    print(info)
    info.update(k1=123, k2=456, k3=789)    # update() 也支持在括号中直接使用=进行键值对赋值,其会自动转换成字典的形式,类似**kwargs
    print(info)
    
    print("删除(两种):")
    info.pop("stu4")                       # pop() 可传入第二个参数(默认值),表示若没有指定的key,则返回默认值
    print(info)
    del info["stu3"]
    print(info)
    
    print("修改:")
    info['stu4'] = "Tom"
    print(info)
    
    print("查找(三种):")
    print("stu1" in info)                  # 判断名为stu1的键是否在info字典中
    print(info.get("stu2"))                # 获取字典中键为stu2的值
    print(info.get("stu9"))                # 若要获取的键在字典中不存在,则返回None
    print(info["stu2"])                    # 这样获取对应键的值,若字典中不存在则会报错
    
    
    print("字典中的其他方法:")
    print(info.values())                   # 获取字典中的所有的值
    print(info.keys())                     # 获取字典中的所有的键  键和值都可用用for循环来打印出来
    print(info.items())                    # 获取字典中的所有的键和值
    
    info.setdefault("stu7", "Alex")        # 设置默认的键值对
    print(info)
    
    v = dict.fromkeys([1, 2, 3, 4], "hgzero")  # 构建一个字典,将第一个参数迭代为key , 第二个参数为每个key的value
    print(v)
    
    print("字典的循环:") for key in info: print(key, info[key]) for k, v in info.items(): # 会先把dict字典转换为list列表,数据量大时不用 print(k, v)

    7. 集合

    7.1 集合类型说明

    1)集合的特点

    • 子元素不重复:具有天生去重性(将一个列表转换成集合,就自动去重了);
    • 子元素必须可哈希:集合是可变类型,但是不能修改,只能增加或者删除;
    • 集合是无序的;

    2)注意

    • 集合中没有提供 索引、切片、步长 这些功能,且无法使用索引操作;
    • 集合可以通过 len() 函数获取长度,也可以通过for循环来取值;

    7.2 集合的三种定义方式

    a = {3, 6, 4, 7, 8}          
    
    s = set([3, 5, 9, 10, 2])      # 可用set()方法来生成集合, 生成了集合 {3,5,9,10,2}
    s2 = set("Hello")              # 这样会生成包含这个字符串中每个字母的集合
    
    f = frozenset({2, 3, 5, 6, 7}) # 此处定义了一个不可变类型的集合,不可增加或者删除其中的值

    7.3 集合的处理方法

    1)添加

    • add()
    • update()

    2)删除

    • pop()
    • remove()
    • discard()

    3)拷贝&清空

    • copy()
    • clear()

    4)存在判断

    • in
    • not in

    5)集合中的交、并、差、对称差 集

    • |,&,-,^

    6)集合关系的判断

    • isdisjoint()
    • issubset()
    • issuperset()

    7.4 集合的转换

    其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据有重复会自动剔除(自动去重)。

    int、str、tuple、dict 都可以转换为集合。

    v1 = [11,22,33,11,3,99,22]
    v2 = set(v1)
    print(v2) 
    # 结果为:{11,22,33,3,99}
    
    v1 = "傻XCCP"
    v2 = set(v1)
    print(v2) 
    # 结果为:{"傻","X","C","C","P"}
    
    v1 = (11,22,3,11)
    v2 = set(v1)
    print(v2) 
    # 结果为:{11,22,3}
    
    v1 = {"age":12, "status":True,"name":"傻X"}
    print( set(v1.keys()) )    # 输出:{'status', 'name', 'age'}
    print( set(v1.values()) )  # 输出:{'status', 'name', 'age'}
    print( set(v1.items()) )   # 输出:{('age', 12), ('status', True), ('name', '傻X')}

    7.5 集合常用方法示例代码

    # 集合:去重性 ,  将一个列表转换成集合,就自动去重了
    # 集合是无序的
    # 集合是可变类型,但是不能修改,只能增加或者删除
    
    a = {3, 6, 4, 7, 8}          # 定义集合的方式
    s = set([3, 5, 9, 10, 2])    # 可用set()方法来生成集合, 生成了集合 {3,5,9,10,2}
    s2 = set("Hello")      # 这样会生成包含这个字符串中每个字母的集合
    
    
    print("定义一个不可变类型的集合:")
    f = frozenset({2, 3, 5, 6, 7})    # 此处定义了一个不可变类型的集合,不可增加或者删除其中的值
    print(f)
    for i in f:
        print(i)
    
    print("添加(两种):")
    s.add("x")                   # 添加一项,且一次只能添加一个值
    s.update([12, 45, 77])       # 添加多项,可以传进各种可迭代对象,统一迭代添加到集合中
    s.update(s2)                 # 更新
    print(s)
    
    print("删除(三种):")
    s.pop()                      # 因为集合是无序的,所以pop()是随机删除
    s.remove("H")                # 删除一项,若不存在会报错
    s.discard("e")               # 若不存在不会报错
    print(s)
    
    print("拷贝:")
    b = a.copy()
    print(b)
    
    print("清空:")
    a.clear()
    print(a)
    
    print("判断:")
    print(2 in s)                # 判断2是否在s集合中
    print(2 not in s)
    
    print("获取集合的长度:")
    print(len(s))                # 获取集合的长度
    
    
    print("集合中的交、并、差、对称差  集:")
    # a = s | s2                 # 两者之间的并集
    x = a.union(s2)
    
    # b = s & s2                 # 两者之间的交集
    y = s.intersection(s2)
    
    # c = s - s2                 # 差集 (在s中,但不在s2中)
    z = s.difference(s2)
    
    # d = s ^ s2                 # 对称差集 (在s或s2中,但不会同时出现在二者中)
    w = s.symmetric_difference(s2)
    
    
    print("两个集合之间关系的判断:")
    a1 = {1, 2, 3, 4, 5}
    a2 = {1, 2, 3, 4, 5, 6, 7, 8}
    print(a1.isdisjoint(a2))     # 判断两个集合中是否有交集,如果没有则为True,如果有则为False
    print(a1.issubset(a2))       # 判断a1是否为a2的子集,若是则为真,否则为假
    print(a1.issuperset(a2))     # 判断a1是否为a2的父集,若是则为真,否则为假
  • 相关阅读:
    CSS3详解:transform
    js解决checkbox全选和反选的问题
    Scroll文字滚动js
    PAT乙级 解题目录
    PAT 1005 继续(3n+1)猜想 (25)(代码)
    PAT 1004 成绩排名 (20)(代码)
    PAT 1002 写出这个数 (20)(代码)
    PAT 1001 害死人不偿命的(3n+1)猜想 (15)(C++&JAVA&Python)
    PAT 1045 快速排序(25)(STL-set+思路+测试点分析)
    PAT 1050 螺旋矩阵(25)(代码)
  • 原文地址:https://www.cnblogs.com/hgzero/p/9482652.html
Copyright © 2020-2023  润新知