python的基本数据类型:数字、字符串、列表、元祖、字典、集合
一、基本数据类型
1.1 数字int
数字主要是用来计算用的,使用方法并不多。
1 # bit_length() 当十进制用二进制表示的时候,最少的使用二进制的位数 2 i = 3 3 print(i.bit_length()) 4 """ 5 1 0000 0001 6 2 0000 0010 7 3 0000 0011 两位 8 5 0000 0101 9 """
1.2 布尔型 bool
布尔型就两种:True(真),False(假).
真 非 0 True
假 0 False
注:在使用While(1)这样写执行效率比While(True) 高
1 #int ------>bool 只要是0 -----> False 其余的就是True 2 # while True: 3 # pass 4 # while 1: 5 # 效率更高
1.3字符串Str
1.3.1 字符串的索引与切片
索引即下标,就是字符串组成的元素从第一个开始,初始索引从0开始以此类推
1 s = "ABCDGHJHSJKAH" 2 #索引 第一位是0 变量名[index] 3 print(s[0]) 4 print(s[1])
切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾头不顾尾)
1 a = 'ABCDEFGHIJK' 2 print(a[0:3]) 3 print(a[2:5]) 4 print(a[0:]) #默认到最后 5 print(a[0:-1]) # -1 是列表中最后一个元素的索引,但是要满足顾头不顾腚的原则,所以取不到K元素 6 print(a[0:5:2]) #加步长 7 print(a[5:0:-2]) #反向加步长
1.3.2 字符串的常见方法
1 #字符串的索引与切片 2 # s = "ABCDGHJHSJKAH" 3 # #索引 第一位是0 变量名[index] 4 # print(s[0]) 5 # print(s[1]) 6 # #字符串的切片: 顾头不顾尾 取不到最后一个值 7 # s3=s[0:-1] 8 # print(s3) 9 # # #获取最后一位 10 # # print(s[-1]) 11 # # #获取倒数第二位 12 # # print(s[-2]) 13 # # print(s[0:s.__len__()]) #或者 14 # # print(s[:]) 15 # # print(s[0:]) 16 # #跳着取0 2 4 加步长 s[首:尾:步长] 17 # # s10=s[0:5:2] 18 # # print(s10) 19 # #倒着取 20 # # s11=s[4:0:-1] #顾头不顾尾 21 # # print(s11) 22 # # print(s[3::-1]) 23 # # #倒序取出 24 # # print(s[-1::-1])#或者print(s[::-1]) 25 # 字符串的操作 26 s = "alexWusir" 27 # 首字母大写 28 print(s.capitalize()) 29 30 # 全部大写 31 print(s.upper()) 32 33 # 全部小写 34 print(s.lower()) 35 36 # 大小写翻转 37 print(s.swapcase()) 38 # 乘号或者空格或者数字 隔开 隔开的单词首字母大写 并且保留空格 39 s="alejdkgon-wusir " 40 print(s.title()) 41 # 内容居中,总长度,空拔出填充后面的填充物 # 42 print(s.center(20,"#")) 43 # \t 8 16 ... 如果没有内容 补空格 44 print(s.expandtabs()) 45 46 # 公共方法 47 print(len(s)) 48 # 判断前两位由什么组成 49 print(s.startswith("al")) # 判断前两位以什么开头 50 # 判断字符串含有y 并返回元素的索引 找不到返回-1 51 # 以jdk在下标3到6之间检索 52 print(s.endswith('jdk',3,6)) 53 print(s.find("y")) 54 # index 找不到报错 55 # 报错内容:ValueError: substring not found 56 print(s.index("t")) 57 # 去空格 58 print(s.strip()) 59 s = ";alex;wusir;taibai" # str------>list 60 # 并且会返回一个list 61 print(s.split(";")) # 一分为2 62 # format 的三种玩儿法 格式化输出 63 res = '{}{}{}'.format('egon',18,'male') 64 print(res) #egon18male 65 res = '{1}{0}{2}'.format('egon',18,'male') 66 print(res) #18egonmale 67 res = '{name}{age}{gender}'.format(gender='male',name='egon',age=18) 68 print(res) #egon18male 69 70 # replace 71 msg = 'I love China China' 72 # I love female China 73 print(msg.replace('China','female',1)) 74 # I love female female 75 print(msg.replace('China','female',2)) 76 77 # is 系列 78 msg = 'I have much money 12343212,just a joke -_-' 79 # msg 是由纯字母组成的嘛 False 80 print(msg.isalpha()) 81 # msg 是由纯数字组成的嘛 # False 82 print(msg.isdigit()) 83 # msg 是由字母数字混合组成的嘛 84 # False 85 print(msg.isalnum())
1.4 元祖
元祖被称为只读列表,即数据可以被查询到,但是不可以被修改。所以,字符串的切片操作同样适合于元祖
1 # 元祖 只读列表,可循环查询 可切片... 2 # 儿子不可以改,孙子可能可以改 3 tu = (1,2,3,"alex",[2,3,4,"taibai"],"egon") 4 # 修改孙子的元素 5 tu[4][3] = tu[4][3].upper() 6 tu[4].append("goodMan") 7 print(tu) 8 for i in tu: 9 print(i)
1.5 列表
列表是python中的基本数据类型之一,其他语言中也有类似的数据类型。比如JS中的叫数组。列表是以[]括起来,每个元素之间以逗号隔开,列表里面可以存放各种数据类型 比如:
1 li = ['alex',1,True,[1,2,3],(4,5,6),{'name','tom'}]
列表相较于字符串,不仅可以存储不同的数据类型,而且可以存储大量数据。而且列表是有序的,有索引值,可切片,方便存储。
1.5.1 、增
1 li = [1,'a','b',2,3,'a'] 2 # insert() 按照索引去追加 3 # li.insert(0,55) 4 # [55, 1, 'a', 'b', 2, 3, 'a'] 5 # append() 直接追加到最后面 6 # li.append('hello') 7 # [55, 1, 'a', 'b', 2, 3, 'a', 'hello'] 8 # extend() 迭代的去增加 9 # li.extend(['q','w','e']) 10 # li.extend(['q','w','aaa']) 11 # [55, 1, 'a', 'b', 2, 3, 'a', 'hello', 'q', 'w', 'aaa'] 12 # li.extend('a,b,c') 13 # li.extend('abc') 14 # [1, 'a', 'b', 2, 3, 'a', 'a', ',', 'b', ',', 'c', 'a', 'b', 'c'] 15 print(li)
1.5.2、删
1 li = [1,'a','b',2,3,'a'] 2 按照位置去删除,有返回值,返回值为li[index] 3 # ret = li.pop(1) 4 # [1, 'b', 2, 3, 'a'] 移除li[1] 5 # 按照位置去删除,也可以切片删除 没有返回值 6 # del li[0] 7 # 切片时首尾皆删除 8 # del li[0:2] 9 # 按照元素去删除,只删除查看到的第一个元素 10 # li.remove('a') 11 # 清空列表 12 # li.clear() 13 print(li)
1.5.3、改
1 li = [1,'a','b',2,3,'a'] 2 # 改 3 # 按照索引去修改 4 # li [1] = ['haha'] 5 # 顾头不顾尾,可切片修改 6 li[0:2] =['1','2'] 7 print(li)
1.5.4 查
切片去查,或者迭代去查询
1.5.5 其他操作
1 # li = [1,'a','b',2,3,'a'] 2 # 统计某一个字符出现的次数 3 # print(li.count('a')) 4 # index 用于从列表中找到某个值第一个匹配项的索引位置 5 # print(li.index('a')) 6 li = [1,-9,8,10] 7 li.sort() 8 # 从大到小 反序 9 # li.sort(reverse=True) 10 # 按照某一种规则排序,此处为按照绝对值之后排序 11 # li.sort(key=abs) 12 # 翻转 13 li.reverse() 14 print(li)
1.6 字典
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希值运算。根据计算的结果决定value的存储地址、所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变的数据类型。如:数字、字符串、元祖。
字典是出列表之外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间最大的区别在于:字典中的元素是通过键来存取的。而不是通过偏移量来存去的。
1 # dict 2 # 数据类型划分: 可变数据类型,不可变数据类型 3 """ 4 不可变数据类型;元祖,bool ,int str 可哈希 5 可变数据类型; list dict set 6 dict key 必须是不可变的数据类型 可哈希 7 value 任意数据类型 8 dict 优点: 二分查找去查询 9 存储大量的关系 10 特点:无序的 11 """
1.6.1、增
1 dic = {'name':'jin','age':18,'sex':'male'} 2 # setDefault 在字典中添加键值对。如果只有键对应的值是None。但是如果原字典中存在设置的键值对。则它不会更改或者覆盖 3 # 由于存在键为name 所以值并不发生改变 4 # dic.setdefault('name','baby') 5 # dic.setdefault('name1','baby') 6 # 直接在后面追加 []为键 后为值 7 dic['tel']=12321321 8 # {'name': 'jin', 'age': 18, 'sex': 'male', 'tel': 12321321} 9 print(dic)
1.6.2、删
1 dic = {'name':'jin','age':18,'sex':'male'} 2 # pop 移除键值 3 # dic.pop('name') 4 # 与pop的区别在于del没有返回值 5 # del dic['name'] 6 # 随机删除字典中的某个键值对。将删除的键值对以元祖的方式返回 7 ret = dic.popitem() 8 # ('sex', 'male') 9 # print(ret) 10 # {'name': 'jin', 'age': 18} 11 print(dic)
1.6.3、改
1 dic = {'name':'jin','age':18,'sex':'male'} 2 # 更改name 3 # dic['name']='angle' 4 # print(dic) 5 dic2 = {'name':'haha','age':26} 6 # 讲dic所有的键值对覆盖添加(相同的覆盖。没有的添加)到dic2中 7 dic2.update(dic) 8 # {'name': 'jin', 'age': 18, 'sex': 'male'} 9 print(dic2)
1.6.4、查
1 dic = {'name':'jin','age':18,'sex':'male'} 2 # 查找键为name 的值 3 # ret = dic['name'] 4 # 同上 5 # ret = dic.get('name') 6 # 没有就返回None 7 ret = dic.get('name1') 8 print(ret)
1.6.5、其他操作
1 dic = {'name':'jin','age':18,'sex':'male'} 2 item= dic.items() 3 # dict_items([('name', 'jin'), ('age', 18), ('sex', 'male')]) 4 # <class 'dict_items'> 5 # print(item) 6 7 # keys = dic.keys() 8 # dict_keys(['name', 'age', 'sex']) <class 'dict_keys'> 9 # print(keys,type(keys)) 10 11 values = dic.values() 12 # dict_values(['jin', 18, 'male']) <class 'dict_values'> 13 print(values,type(values))
1.6.6、字典的迭代
1 dic = {'name':'jin','age':18,'sex':'male'} 2 for i in dic: 3 print(i,dic[i]) 4 """ 5 name jin 6 age 18 7 sex male 8 """ 9 for index,i in enumerate(dic): 10 print(index,i,dic[i]) 11 """ 12 0 name jin 13 1 age 18 14 2 sex male 15 """
1.7 集合
集合是无序的,不重复的数据集合。它里面的元素是可哈希(不可变类型),但是集合本身是不可哈希的(所以集合做不了字典的键)。一下就是集合中最重要的两点:
①去重,把一个列表变成集合,就自动去重复了
1 set1 = set(['alex','alex',1,2,3,1,2]) 2 # {1, 2, 3, 'alex'} 3 print(set1)
②关系测试,测两组数据之间的交集、差集、并集等关系
""" 集合: 可变的数据类型,它里面的额元素必须是不可变的数据类型 无序,不重复, 去重复 {} 增 删 查 无改的功能 无序 """
1.7.1、集合的增删改查
1 set1={"alex","wusir"} 2 # add 3 # set1.add("女神") 4 # {'女神', 'wusir', 'alex'} 5 print(set1) 6 # update 7 set1.update("abc") 8 # {'wusir', 'a', 'c', 'alex', 'b'} 将abc迭代存储 9 print(set1) 10 # 删除 11 set1.pop() # 随机删除 12 print(set1) 13 set1.remove("alex") # 按照元素去删除 14 set1.clear() # 清空集合 空集合 set() 15 del set1 # 删除整个集合
1.7.2、集合的关系操作
交集
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 print(set1 & set2) # {4, 5} 4 print(set1.intersection(set2)) # {4, 5}
并集
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8} 4 print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7,8}
差集
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 print(set1 - set2) # {1, 2, 3} 4 print(set1.difference(set2)) # {1, 2, 3}
反交集
1 set1 = {1,2,3,4,5} 2 set2 = {4,5,6,7,8} 3 print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} 4 print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
子集和超集
1 # 子集和超集 2 set1 = {1,2,3} 3 set2 = {1,2,3,4,5,6} 4 print(set1 < set2) 5 print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。 6 print(set2 > set1) 7 print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
1.7.3、frozenset 不可变集合
1 # frozenset不可变集合,让集合变成不可变集合 2 s = frozenset('barry') 3 print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>