python基本数据类型及内置方法
一、int类型
age = 18 # age = int(18)
- 类型转换:
纯数字的字符串转换成整型:
res = int('111000222')
print(res,type(res)) - 10进制转换二进制、八进制及十六进制
# 10进制 -> 二进制
# 11 - > 1011
# 1011-> 8+2+1
# print(bin(11)) # 0b1011
# 10进制 -> 八进制
# print(oct(11)) # 0o13
# 10进制 -> 十六进制
# print(hex(11)) # 0xb
# print(hex(123)) # 0xb
- 其他进制之间的转换
# 二进制->10进制
# print(int('0b1011',2)) # 11
# 二进制->8进制
# print(int('0o13',8)) # 11
# 二进制->16进制
# print(int('0xb',16)) # 11
二、float类型
res = float("5.5")
print(res,type(res))
总结:int与float的使用就是针对数学运算+比较运算
三、str类型
msg='hello world' # msg=str('msg')
print(msg,type(msg))
- 类型转换:
# str可以把任意其他类型都转成字符串
# res=str({'a':1})
# print(res,type(res)) - 内置方法:
# (1)索引取值,支持正向取值,反向取值,不能修改值
msg = 'hello python'
print(msg[4])
print(msg[-1])
# (2)切片:索引的拓展应用,从一个大字符串中拷贝出一个子字符串
msg = 'hello world'
# 顾头不顾尾(左闭右开原则),支持步长
res=msg[0:5]
print(res) # hello
print(msg) # hello world
res = msg[0:5:2] # 相当于获取了下标分别为0 2 4的数据
print(res) # hlo
res=msg[::-1] # 把字符串倒过来
print(res)
# (3)获取字符串长度len()
msg = 'hello world'
print(len(msg))
# (4)成员运算in和not in
# 判断一个子字符串是否存在于一个大字符串中
print("a" in "abc is str")
print("bmw" not in "car")
# (5)移除字符串左右两侧的符号strip,默认去掉空格
msg=' hello '
res = msg.strip()
print(msg) # 不会改变原值
print(res) # 是产生了新值
# 拓展:lstrip,rstrip,原理同strip,lstrip消除左边字符,rstrip消除右边字符,默认去掉空格
# (6)切分split:把一个字符串按照某种分隔符进行切分,得到一个列表,默认分隔符是空格
info = 'wcg 18 male'
res = info.split()
print(res)
# 拓展:rsplit 切割字符串从右开始切,得到一个列表,默认分隔符是空格
# 指定分隔符
info = 'wcg:18:male'
res = info.split(':')
print(res)
# 指定分隔次数(了解)
info = 'wcg:18:male'
res = info.split(':',1)
print(res)
# (7)字符串循环取值的问题
msg = 'i am lucy'
for i in msg:
print(i)
# (8)大小写转换(lower,upper)
msg = 'AbbbCCCC'
print(msg.lower())
print(msg.upper())
# (9)判断是否以指定字符开头/结尾(startswith,endswith),返回值True/False
print("dog is animal".startswith("dog"))
print("dog is animal".endswith('is'))
# (10)把列表拼接成字符串(join)
''.join(['my','name','is','lucy'])
# (11)替换指定字符串(replace),可以指定替换个数,默认全部替换
msg = "you can you up no can no bb"
print(msg.replace("you","YOU",))
print(msg.replace("you","YOU",1))
# (12)判断字符串是否由纯数字组成(isdigit)
print('123'.isdigit())
print('12.3'.isdigit())
# (13)is其他系列
print('abc'.islower())
print('ABC'.isupper())
print('Hello World'.istitle())
print('123123aadsf'.isalnum()) # 字符串由字母或数字组成结果为True
print('ad'.isalpha()) # 字符串由由字母组成结果为True
print(' '.isspace()) # 字符串由空格组成结果为True
print('print'.isidentifier())
print('age_of_allen'.isidentifier())
# (14)查找指定的字符串系列(find,index),其中find找不到会返回-1,index找不到则抛出异常
msg='hello allen hahaha'
# 找到返回起始索引
print(msg.find('e')) # 返回要查找的字符串在大字符串中的起始索引
print(msg.find('al'))
print(msg.index('e'))
# 找不到时二者的区别
print(msg.find('xxx')) # 返回-1,代表找不到
print(msg.index('xxx')) # 抛出异常
# (15)计算统计次数(count)
msg = 'hello aaa hahaha aaa、 aaa'
print(msg.count('aaa'))
# (16)打印指定长度字符串(center,ljust,rjust,zfill)
print('wcg'.center(50,'*')) # 字符串总长度50,wcg居中显示
print('wcg'.ljust(50,'*')) # 字符串总长度50,wcg靠左显示
print('wcg'.rjust(50,'*')) # 字符串总长度50,wcg靠右显示
print('wcg'.zfill(10)) # 字符串总长度10,wcg靠右显示,左边字符用0填充
# (17)首字母大写captalize,大小写翻转swapcase,每个单词都首字母大写title
print("hello world wcG".capitalize())
print("Hello WorLd ALlEn".swapcase())
print("hello world wcg".title())
# (18)设定制表符(expandtabs)
msg='hello\tworld'
print(msg.expandtabs(2)) # 设置制表符代表的空格数为2
四、list类型
按位置存放多个值,以下标为key取值,下标从0开始
lst = ['abc',123,(1,5,7)] # lst = list( ['abc',123,(1,5,7)] )
print(lst[2],type(lst))
- 类型转换: 但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表
res=list('hello')
print(res)
res=list({'k1':111,'k2':222,'k3':3333})
print(res) - 内置方法
# (1)按索引存取值(正向存取+反向存取):即可以取也可以改
l=[111,'wcg','hello']
# 正向取
print(l[0])
# 反向取
print(l[-1])
# 可以取也可以改:索引存在则修改对应的值
l[0]=222
print(l)
# 无论是取值操作还是赋值操作:索引不存在则报错
l[3]=333
# (2)切片(顾头不顾尾,步长)
# 原理同字符串切片操作
# (3)获取长度(len)
lst = [1,2,3,4]
print(len(lst))
# (4)成员运算in和not in
print('aaa' in ['aaa', 1, 2])
print(1 in ['aaa', 1, 2])
# (5)往列表添加值(append,insert,extend)
# 在列表后面追加值
l = [111,'wcg','hello']
l.append(3333)
l.append(4444)
print(l)
# 根据索引位置插入值
l = [111,'wcg','hello']
l.insert(0,'lucy')
print(l)
# extend添加值
new_l = [1,2,3]
l = [111,'556','hello']
l.append(new_l)
print(l)
# (6)删除
# 方式一:通用的删除方法,只是单纯的删除、没有返回值
l = [111, '998', 'hello']
del l[1]
x = del l[1] # 抛出异常,不支持赋值语法
print(l)
# 方式二:l.pop()根据索引删除,会返回删除的值
l = [111, 'oop', 'hello']
l.pop() # 不指定索引默认删除最后一个
l.pop()
print(l)
res = l.pop(1)
print(l)
print(res)
# 方式三:l.remove()根据元素删除,返回None
l = [111, '889', [1,2,3],'hello']
l.remove([1,2,3])
print(l)
res=l.remove('hello')
print(res) # None
# (7)循环
l = [1,'aaa','bbb']
for x in l:
l.pop(1)
print(x)
# (8)统计(count)
l = [1, 'aaa', 'bbb','aaa','aaa']
l.count()
print(l.count('aaa'))
# (9)查找(index)
l = [1, 'aaa', 'bbb','aaa','aaa']
print(l.index('aaa'))
print(l.index('aaaaaaaaa')) # 找不到报错
# (10)清空列表(clear)
l = [1, 'aaa', 'bbb','aaa','aaa']
l.clear()
print(l)
# (11)列表翻转(reverse)
# 注意:不是排序,就是将列表倒过来
l = [1, 'aaa','bbb','ccc']
l.reverse()
print(l))
# (12)排序(sort)
# 列表内元素必须是同种类型才可以排序
l = [11,-3,9,2,3.1]
l.sort() # 默认从小到大排,称之为升序
l.sort(reverse=True) # 从大到小排,设置为降序
print(l)
# 拓展:
# 字符串可以比大小,按照对应的位置的字符依次pk
# 字符串的大小是按照ASCI码表的先后顺序加以区别,表中排在后面的字符大于前面的
print('a'>'b')
print('abz'>'abcdefg')
# 了解:列表也可以比大小,原理同字符串一样,但是对应位置的元素必须是同种类型
l1 = [1,'abc','zaa']
l2 = [1,'abc','zb']
print(l1 < l2)
- 利用列表模拟队列和堆栈效果
# 1、队列:FIFO,先进先出
l = []
# # 入队操作
l.append('first')
l.append('second')
l.append('third')
# 出队操作
print(l.pop(0))
print(l.pop(0))
print(l.pop(0))
# 2、堆栈:LIFO,后进先出
l = []
# 入栈操作
l.append('first')
l.append('second')
l.append('third')
# 出队操作
print(l.pop())
print(l.pop())
print(l.pop())
五、tuple类型
元组就是"一个不可变的列表"
作用:按照索引/位置存放多个值,只用于读不用于改
定义:()内用逗号分隔开多个任意类型的元素
t=(1,1.3,'aa') # t=tuple((1,1.3,'aa'))
print(t,type(t))
重点1:如果元组中只有一个元素,必须加逗号
t = (10,) # 如果元组中只有一个元素,必须加逗号
print(t,type(t))
重点2:元祖中按照下标存放的数据只能读不能修改,如果该下标对应的值是可变类型,那么可以修改该下标对应的可变类型中的值
t = (1,'aaa',[1,2,3])
t[0] = 888 # 不可以修改
t[2][0] = '1' # 可以修改
- 类型转换
print(tuple('hello'))
print(tuple([1,2,3]))
print(tuple({'a1':111,'a2':333})) - 内置方法
# (1)按索引取值(正向取+反向取):只能取
t=('aa','bbb','cc')
print(t[0])
print(t[-1])
# (2)切片(顾头不顾尾,步长)
t=('aa','bbb','cc','dd','eee')
print(t[0:3])
print(t[::-1])
# (3)长度
t=('aa','bbb','cc','dd','eee')
print(len(t))
# (4)成员运算in和not in
print('aa' in t)
# (5)循环
for x in t:
print(x)
# (6)查找
t=(2,3,111,111,111,111)
print(t.index(111))
print(t.index(1111111111))
# (7)统计次数
print(t.count(111))
六、dict类型
{}内用逗号分隔开多个key:value,其中value可以使任意类型,但是
key必须是不可变类型,且不能重复
创建字典的两种方式:
# (1)方式一:
d = {'k1':111,(1,2,3):222} # d=dict(...)
print(d['k1'])
print(d[(1,2,3)])
print(type(d))
d={} # 默认定义出来的是空字典
print(d,type(d))
# (2)方式二:
d = dict(x=1,y=2,z=3)
print(d,type(d))
# (3)方式三:
info=[
['name','wcg'],
('age',18),
['gender','male']
]
res=dict(info) # 一行代码搞定上述for循环的工作
print(res)
# (4)方式四:快速初始化一个字典
keys = ['name','age','gender']
d = {}
for k in keys:
d[k] = None
print(d)
d = {}.fromkeys(keys,None) # 一行代码搞定上述for循环的工作
print(d)
- 内置方法
# (1)按key存取值:可存可取
d = {'k1':111}
# 针对赋值操作:key存在,则修改
d['k1']=222
# 针对赋值操作:key不存在,则创建新值
d['k2']=3333
print(d)
# (2)获取长度(len)
d = {'k1':111,'k2':2222,'k1':3333,'k1':4444}
print(d)
print(len(d))
# (3)成员运算in和not in:根据key
d = {'k1':111,'k2':2222}
print('k1' in d)
print(111 in d)
# (4)删除方法
d={'k1':111,'k2':2222}
# 通用删除
del d['k1']
print(d)
# pop删除:根据key删除元素,返回删除key对应的那个value值
# res = d.pop('k2')
# print(d)
# print(res)
# popitem删除:随机删除,返回元组(删除的key,删除的value)
# res = d.popitem()
# print(d)
# print(res)
# (5)获取键keys(),值values(),键值对items()
d = {'k1':111,'k2':2222}
d.keys()
d.values()
d.items()
# (6)for循环
for k in d.keys():
print(k)
for k in d:
print(k)
for v in d.values():
print(v)
for k,v in d.items():
print(k,v)
print(list(d.keys()))
print(list(d.values()))
print(list(d.items()))
# (7)清空操作(clear)
d = {'k1':111}
d.clear()
# (8)更新操作(update)
d.update({'k2':222,'k3':333,'k1':111111111111111})
print(d)
# (9)根据key取值另一种方法(get)
# d.get() :根据key取值,容错性好
print(d['k2']) # key不存在则报错
print(d.get('k1')) # 111
print(d.get('k2')) # key不存在不报错,返回None
# (10)设置默认值(setdefault)
# 如果key有则不添加,返回字典中key对应的值
info = {'name':'wcg'}
res = info.setdefault('name','lucy')
print(info)
print(res)
# 如果key没有则添加,返回字典中key对应的值
info={}
res=info.setdefault('name','lucy')
print(info)
print(res)
六、set类型
"""
在{}内用逗号分隔开多个元素,多个元素满足以下三个条件
1. 集合内元素必须为不可变类型
2. 集合内元素无序
3. 集合内元素没有重复
"""
s = {1,[1,2]} # 集合内元素必须为不可变类型
s = {1,'a','z','b',4,7} # 集合内元素无序
s = {1,1,1,1,1,1,'a','b'} # 集合内元素没有重复
print(s)
- 类型转换
set({1,2,3})
res = set('helloworld')
print(res)
print(set([1,1,1,1,1,1,[11,222]]) # 报错,必须为不可变类型 - 内置方法
friends1 = {"lucy","kevin","jack","wcg"}
friends2 =
# (1)取交集:两者共同的好友
res = friends1 & friends2
print(res)
print(friends1.intersection(friends2))
# (2)取并集/合集:两者所有的好友
print(friends1 | friends2)
print(friends1.union(friends2))
# (3)取差集:取friends1独有的好友
print(friends1 - friends2)
print(friends1.difference(friends2))
# 取friends2独有的好友
print(friends2 - friends1)
print(friends2.difference(friends1))
# (4)对称差集: 求两个用户独有的好友们(即去掉共有的好友)
print(friends1 ^ friends2)
print(friends1.symmetric_difference(friends2))
# 4.5 父子集:包含的关系
s1 = {1,2,3}
s2 = {1,2,4}
# 不存在包含关系,下面比较均为False
print(s1 > s2)
print(s1 < s2)
s1 = {1,2,3}
s2 = {1,2}
print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2父级
print(s1.issuperset(s2))
print(s2.issubset(s1)) # s2 < s2 =>True
s1 = {1,2,3}
s2 = {1,2,3}
print(s1 == s2) # s1与s2互为父子
print(s1.issuperset(s2))
print(s2.issuperset(s1))
# =========================去重=========================
# (1)只能针对不可变类型去重
print(set([1,1,1,1,2]))
# (2)无法保证原来的顺序
l = [1,'a','b','z',1,1,1,2]
l = list(set(l))
print(l)
# ======================其他内置方法======================
# (1)删除(discard,remove)
s = {1,2,3}
s.discard(4) # 删除元素不存在do nothing
print(s)
s.remove(4) # 删除元素不存在则报错
# (2)其他内置方法update、pop、add
s.update({1,3,5})
print(s)
res = s.pop()
print(res)
s.add(4)
print(s)