python数据基本类型
python基本数据类型
1.int--数字类型:整数.主要用来进行数学计算
2.bool--布尔类型:判断真假
3.str--字符串类型:可以保存少量数据并进行相应的操作
4.list--列表:存储大量数据用[]表示
5.tuple--元组:不可以发生改变用()表示
6.dict--字典:保存键值对,一样可以保存大量数据
7.set--集合:保存大量数据.不可以重复.其实就是不保存value的dict
str是类,int是类,dict、list、tuple等等都是类,但是str却不能直接使用,因为它是抽象的表示了字符串这一类事物,并不能满足表示某个特定字符串的需求,我们必须要str1 = ''初始化一个对象,这时的str1具有str的属性,可以使用str中的方法。
类为我们创建对象,提供功能,在python中,一切事物都是对象!
type(对象名):可以看到属于哪一个类
print(type(a)) #<class 'int'>
dir(类名):展示类下的所有方法
print(dir(int)) ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__'
, '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__',
'__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__',
'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
一.int
1. 在python3中所有的数据都是整型,但在python2中如果数据量比较大,会使用long类型,但在python3中不存在在long类型
2. python可以进行 加+ 减- 乘* 除/ 运算,
幂:2得3次幂可以表示:2**3 或者 pow(2,3)
绝对值:abs()
print(pow(2,3)) #8 print(2**3) #8 print(abs(-2)) #2 print(10%3) #1 print(10//3) #3 print(10/3) #3.3333333333333335
3.方法:
(1) __cmp__:比较两个数的大小
>>> a = 12 >>> b = 15 >>> cmp(a,b) #比较两个参数的值,如果第一个参数小于第二个参数,返回-1 -1 >>> cmp(b,a) #比较两个参数的值,如果第一个参数大于第二个参数,返回1 1 >>> c = 12 >>> a.__cmp__(c) #比较两个参数的值,如果第一个参数大于第二个参数,返回0 0 #cmp方法也有两种调用方式
(2)__neg__/__abs__:取相反数/取绝对值
>>> a = 12 >>> b = 15 >>> cmp(a,b) #比较两个参数的值,如果第一个参数小于第二个参数,返回-1 -1 >>> cmp(b,a) #比较两个参数的值,如果第一个参数大于第二个参数,返回1 1 >>> c = 12 >>> a.__cmp__(c) #比较两个参数的值,如果第一个参数大于第二个参数,返回0 0 #cmp方法也有两种调用方式
(3)__divmod__:返回两个数相除的商和余数组成的元组(商,余数)
1 >>> a = 102 2 >>> b = 10 3 >>> a.__divmod__(b) 4 (10, 2)
(4)__repr__/__str__:转化为解释器可读取的形式/转换为人阅读的形式
(5)bit_length()表示一个数的二进制长度
a=10 print(a.bit_length()) # 8421大法1010
二.bool
所有非空的是True,空的都是False :表示False 0, "", [], tuple(), {}, None
a = 0 print(bool(a)) # False
s = "" print(bool(s)) # 空字符串是false
lst = [1] print(bool(lst)) # 空列表是False dic = {'jj':'林俊杰'} print(bool(dic)) # 空字典是False a = None print(bool(a)) # 表示空. 真空.
数据类型转换:想把某数据转化成XXX:语法:XXX(数据)
1.str => int int(s) #str里只能是数字才能进行转换 2.int => str str(i) 3.lst => tuple tuple(lst) 4.tuple => list list(tu)
三.str
把字符连成串,在python中用' '," ",""" """,''' ''',引起来的内容称为字符串
1.切片和索引
(1)索引
# 索引从零开始 s='你好世界 hello world' print(s[0]) print(s[2]) print(s[4]) print(s[6]) # 你 # 世 # # e # # s='你好世界 hello world' # print(s[20]) #超出边界报错 #索引-1是最后一个 s='你好世界 hello world' print(s[-1]) # d
(2)切片 :[起始位置: 结束位置] 1.顾头不顾尾, 2.从左往右切
# 切片 s='今天是个好日子,今天天上的月亮圆又园' # 切得下标是1,2 顾头不顾尾 print(s[1:3]) # 天是 # 全切 print(s[:]) # 今天是个好日子,今天天上的月亮圆又园 # 从头切到2 print(s[:3]) # 今天是 # 从2切到尾 print(s[2:]) # 是个好日子,今天天上的月亮圆又园 # 切出下标是1到5的元素,每隔两个切一个 print(s[1:6:2]) # 天个日 # 最后一位是-1,从左往右切 print(s[-3:-1]) # 圆又 # 步长取负的,索引也是负的,从左往右切 print(s[-1:-6:-2]) # 园圆月
#注意 print(s[-1:-6:2]) #不输出 print(s[1:6:-2]) #不输出
2.字符串的相关操作
切记:字符串是不可变的对象,所以任何操作对元字符串是不会有任何影响的
2.1大小写转来转去
(1)首字母变成大写
s="hello world" s.capitalize() print(s) #hello world 输出发现并没有发生任何变化,因为字符串本身是不会发生改变的,需要我们重新获取 ret=s.capitalize() print(ret)
#Hello world
(2)全部大写全部小写
s="Hello World" print(s.upper()) # HELLO WORLD print(s.lower()) # hello world print(s.swapcase()) # hELLO wORLD
实际应用:校验用户名输入的验证码是否合法
verify_code="abDe" print(verify_code) user_verify_code=input('请输入验证码') # 全部转化成大写 if user_verify_code.upper()==verify_code.upper(): print('验证成功') else: print('验证失败') # abDe # 请输入验证码abde # 验证成功
2.2切来切去
(1)每个被特殊字符隔开的字母首字母大写
s='today is_middle*autumn吃food' print(s.title()) # Today Is_Middle*Autumn吃Food
(2)定字符串长度,居中/居左/居右
str1='hello world' ret=str1.ljust(20,'8') #设置格式左对齐,其余部分默认情况下,以空格填充 print(ret) # hello world888888888 ret=str1.center(20,'*') #设置格式左对齐,剩余部分已“*”填充 print(ret) # ****hello world***** ret=str1.rjust(20,'&') #设置格式右对齐,剩余部分已“&”填充 print(ret) # &&&&&&&&&hello world
(3)expandtabs:将tab转换成空格,默认一个tab转换成8个空格。当然这里也可以自行指定转换成多少个空格,
(这是linux下,如果windows下,需要打出\t)
>>> name = ' hello world' >>> name.expandtabs() ' hello world' >>> name.expandtabs(20) ' hello world'
(4)strip:默认去掉两端的空格. 空白\t \n和两端的指定内容
# 可以去空格 s=' haha houhou hehe xixi ' ret=s.strip() print(ret) # haha houhou hehe xixi
# 可以去\t \n \r s='haha houhou hehe xixi\t' ret1=s.strip() # haha houhou hehe xixi
# 可以去除指定内容 s='haha houhou xixi hehe' ret=s.strip('haha') print(ret) # houhou xixi hehe前面有个空格
(5)字符串的替换.
s='哈哈 嘻嘻 吼吼 呵呵呵' ret=s.replace('哈哈','中秋节') print(ret) # 中秋节 嘻嘻 吼吼 呵呵呵 # 如果没有也不会报错 s='哈哈 嘻嘻 吼吼 呵呵呵' ret=s.replace('lili','中秋节') print(ret) # 哈哈 嘻嘻 吼吼 呵呵呵 s='hello world hello 林俊杰 hello 你好' ret=s.replace('hello','hi',2) print(ret) # hi world hi 林俊杰 hello 你好
(6)字符串的切割
# 字符串的切割,切割记住一分为二,用谁切割牺牲谁 s='hello world today is autumn' ret=s.split(' ') print(ret) # ['hello', 'world', 'today', 'is', 'autumn'] # 字符串转化成列表,用字符串里不存在的一个元素即可 s='hello world today is autumn' ret=s.split('q') print(ret) # ['hello world today is autumn'] s="""门前大桥下, 游过一群鸭, 快来快来数一数, 二四六七八""" ret=s.split('\n') print(ret) s='hello world today is autumn welcome world hello' ret=s.split('hello') print(ret) # ['', ' world today is autumn welcome world ', '']
3.格式化输出
# 格式化输出 s='我叫%s,今年%s岁了,我喜欢%s'%('name','age','hobby') print(s) # 我叫name,今年age岁了,我喜欢hobby s='我叫{},我喜欢{}'.format('name','hobby') print(s) # 我叫name,我喜欢hobby s='我叫{0},我喜欢{1}再说一遍我叫{0}'.format('name','hobby') print(s) # 我叫name,我喜欢hobby再说一遍我叫name s='我叫{name},我喜欢{hobby}再说一遍我叫{name}'.format(name='name',hobby='hobby') # 我叫name,我喜欢hobby再说一遍我叫name
4.查找
# 判断是否以XXX开头 s="hello world" ret=s.startswith('h') print(ret) # True # 判断是否以什么结尾 s="hello world" ret=s.endswith('d') print(ret) # True s="hello world" ret=s.count('o') print(ret) # 没有输出零次 # 2 s="hello world" ret=s.find('o') print(ret) # 找到第一个就返回下标位置,如果没有返回-1 # 4 rfind:和find用法一样,只是它是从右向左查找 s="hello world" ret=s.index('o') # 找到第一个就返回下标位置,如果没有就会报错 print(ret)
5.条件判断
(9)isalnum:是否是字母或数字
isalpha:是否字母
isdigit:是否数字
isspace:是否空格
islower:是否小写
istitle:是否标题
isupper:是否全大写,
总之都是一些判断的方法,返回的不是True就是False
6.计算字符串的长度
s="hello world" print(len(s)) # 11
7.迭代
s = "王小利刘能赵四" n=0 while n<len(s): print(s[n]) n=n+1 # 王 # 小 # 利 # 刘 # 能 # 赵 # 四 s="hello world" for i in s: print(i) # h # e # l # l # o # # w # o # r # l # d
四.list
2.列表的增删改查
1.列表
列表的切片与索引
列表和字符串一样有索引
1.索引
lst=['哈哈','吼吼','呵呵','嘻嘻'] print(lst[0]) print(lst[2]) print(lst[3]) # 哈哈 # # 呵呵 # # 嘻嘻
2.切片
# 列表的切片 lst=['哈哈','吼吼','呵呵','嘻嘻'] print(lst[1:3]) # ['吼吼', '呵呵'] print(lst[:]) # ['哈哈', '吼吼', '呵呵', '嘻嘻']
#注意 print(lst[-1:-3]) # [] print(lst[-1::-2]) # ['嘻嘻', '吼吼']
2.列表的增删改查
注意: list和str是不一样的,lst可以发生改变,所以直接在对象上修改就可以了
2.1增
1.append lst=['大邋遢','真邋遢','邋遢大王','就是她'] # 在屁股后面添加 lst.append('哈哈') print(lst) # ['大邋遢', '真邋遢', '邋遢大王', '就是她', '哈哈'] 2.insert lst1=['大邋遢','真邋遢','邋遢大王','就是她'] # 在xxx位置插入xxxx内容 lst1.insert(1,'haha') print(lst1) # ['大邋遢', 'haha', '真邋遢', '邋遢大王', '就是她'] 3.extend() lst2=['大邋遢','真邋遢','邋遢大王','就是她'] # 迭代添加 lst2.extend('haha') print(lst2) # ['大邋遢', '真邋遢', '邋遢大王', '就是她', 'h', 'a', 'h', 'a' lst2.extend(['哈哈']) print(lst2) # ['大邋遢', '真邋遢', '邋遢大王', '就是她', 'h', 'a', 'h', 'a', '哈哈']
2.2删
1.pop(索引) lst=['煎饼果子','板栗糕','烤冷面','臭豆腐'] # pop参数为索引,可以看到删除元素,如果索引超过会报错 data=lst.pop(1) print(data) print(lst) # 板栗糕 # ['煎饼果子', '烤冷面', '臭豆腐'] 2.remove(元素) lst1=['煎饼果子','板栗糕','烤冷面','臭豆腐'] # 参数是元素,如果没有就会报错 lst1.remove('臭豆腐') print(lst1) # ['煎饼果子', '板栗糕', '烤冷面']
3.del 切片式 lst2=['煎饼果子','板栗糕','烤冷面','臭豆腐'] del lst2[1:3] print(lst2) # ['煎饼果子', '臭豆腐'] 4.clear清空 lst3=['煎饼果子','板栗糕','烤冷面','臭豆腐'] lst3.clear() print(lst3) # []
2.3改
# 直接改 lst=['锅包肉','火锅','烧烤','水煮鱼'] lst[0]='米线' print(lst) # ['米线', '火锅', '烧烤', '水煮鱼'] # 切片改:相当于先删除后添加 lst1=['锅包肉','火锅','烧烤','水煮鱼'] lst1[1:3]='麻辣烫' # ['锅包肉', '麻', '辣', '烫', '水煮鱼'] lst1[1:3]=['麻辣烫'] print(lst1) # ['锅包肉', '麻辣烫', '烫', '水煮鱼'] lst1=['锅包肉','火锅','烧烤','水煮鱼'] lst1[1::2] = ["酸辣粉","韭菜盒子"] # 切片修改的时候. 如果步长不是1. 注意元素的个数 print(lst1) # ['锅包肉', '酸辣粉', '烧烤', '韭菜盒子']
2.4查
lst=['昌平区','海淀区','哈哈'] for el in lst: print(el) # 昌平区 # 海淀区 # 哈哈
2.5排序
# 默认升序 lst=[1,8,9,10,78,5,6] lst.sort() print(lst) # [1, 5, 6, 8, 9, 10, 78] # 加上之后倒叙 lst.sort(reverse=True) print(lst) # [78, 10, 9, 8, 6, 5, 1]
2.6翻转
lst1=['哈哈','吼吼','呵呵'] lst1.reverse() print(lst1) # ['呵呵', '吼吼', '哈哈']
3.列表的嵌套
lst=['北京',['长城','香山'],'大庆',['博物馆','湿地']] print(lst) # ['北京', ['长城', '香山'], '大庆', ['博物馆', '湿地']] lst=['北京',['长城','香山'],'大庆',['博物馆',['猛犸象','狼','people'],'湿地']] print(lst[3][1][1]) # 狼 lst[3][1][2]=lst[3][1][2].upper() print(lst) # ['北京', ['长城', '香山'], '大庆', ['博物馆', ['猛犸象', '狼', 'PEOPLE'], '湿地']]
五.tuple
1.元组
2.元组的嵌套
1.元组:如果只有一个元素,一定要添加一个逗号,否则就不是元组
元组:俗称不可变列表,又被称为只读列表.元组也是python的基础数据类型之一,用小括号括起来,里面可以放任何数据类型的数据,查询也可以,循环也可以,切片也可以,但是不可以改.
# tuple 元组只读列表 tu=('hello','world','hi') print(tu[1]) # world tu=('hello','world','hi') # 切片之后还是元组 print(tu[1:3]) # ('world', 'hi') for el in tu: print(el) # hello # world # hi
2.元组的嵌套
# 元组的不可变的意思,是子元素不可变,而子元素内部的子元素是可变的,这取决于子元素的是否是可变对象 lst1=['哈哈',[],'呵呵'] lst1[1].append('吼吼') # 可以添加了 print(lst1) # ['哈哈', ['吼吼'], '呵呵'] #反着来和切片一样 for i in range(10,1,-2): print(i) # 10 # 8 # 6 # 4 # 2
六.dict
2.字典的增删改查
1.字典
字典(dict)是pyhton中的唯一的一个映射类型,他是以{ }括起来的键值对组成,在dict中key是唯一的,在保存的根据key来计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为hash算法,切记:dict中存储的key-value中的key必须是可hash的.value没有要求,可以保存任意类型的数据
已知可哈西的(不可变)的数据类型:int,str,tuple,bool
不可哈希(可变)的数据类型:list,dict,set
语法:{key1:value1,key2:value2,}
dic={'name':'刘晓蕾','id':'123','age':18} print(dic['name']) # 刘晓蕾 dic1={(1,2,3):'刘晓蕾','id':'123','age':18} print(dic1) # {(1, 2, 3): '刘晓蕾', 'id': '123', 'age': 18}
dict保存的数据不是按照我们添加进去的顺序保存,是按照hash表的顺序保存的,而hash表不是连续的,所以不能进行切片工作,只能通过key来取值
2.字典的相关操作
2.1增
# 增加 dic={'name':'刘晓蕾','id':123,'edu':'大学'} dic['age']='18' dic['name']='李嘉诚' print(dic) # 如果dict中没有出现这个key,就会新增一个key-value的组合进dict # 如果有则进行覆盖 # {'name': '李嘉诚', 'id': 123, 'edu': '大学', 'age': '18'} dic1={'name':'刘晓蕾','id':123,'edu':'大学'} # 如果没有就就行添加 dic1.setdefault('天王') print(dic1) # {'name': '刘晓蕾', 'id': 123, 'edu': '大学', '天王': None} dic2={'name':'刘晓蕾','id':123,'edu':'大学'} dic2.setdefault('天王','刘德华') # 如果没有就进行添加 print(dic2) # {'name': '刘晓蕾', 'id': 123, 'edu': '大学', '天王': '刘德华'} dic2={'name':'刘晓蕾','id':123,'edu':'大学'} dic2.setdefault('name','哈哈') print(dic2) # 如果有就不会起作用 # {'name': '刘晓蕾', 'id': 123, 'edu': '大学'}
2.2删pop del clear
# 删除 # 字典是pop,列表里面是pop(索引),remove('元素') dic={'name':'哈哈','id':'15100','edu':'本科'} ret=dic.pop('name') print(ret) #返回键值 print(dic) # 哈哈 # {'id': '15100', 'edu': '本科'} # 随机删除 dic2={'name':'哈哈','id':'15100','edu':'本科'} ret=dic2.popitem() print(ret) #返回一个元组 print(dic2) # ('edu', '本科') # {'name': '哈哈', 'id': '15100'} # 清空字典中的所有内容 dic3={'name':'哈哈','id':'15100','edu':'本科'} dic3.clear() print(dic3) # {}
2.3改
# 修改 # 直接索引修改 dic4={'id':123,'name':'某某','age':18,'job':'none'} dic4['id']='151' print(dic4) # {'id': '151', 'name': '某某', 'age': 18, 'job': 'none'} # update dic6={'hobby':'fishing','name':'哈哈'} dic5={'id':123,'name':'某某','age':18,'job':'none'} dic5.update(dic6) # ,dic6的内容更新到dic5中,如果key重名则进行替换,如果不存在key则添加 print(dic5) # {'id': 123, 'name': '哈哈', 'age': 18, 'job': 'none', 'hobby': 'fishing'} print(dic6) # {'hobby': 'fishing', 'name': '哈哈'}
2.4查
3.字典的嵌套
七.集合