今日是学习python的第005课,本节课详细讲解了数据类型。
可变类型与不可变类型
什么是可变类型?
值变了,但是ID没有变,证明没有生成新的值而是改变了原值,此原值即为可变类型。
例如:列表型、字典型
y=['a','b','c']
print(id(y))
y[0]='A'
print(y)
print(id(y)) #值变了,ID没有变,没有生成新的值,说明原值为可变类型
什么是不可变类型?
值变了,ID也随之改变,证明生成了新的值而不是在改变原值,此原值即为不可变类型。
例如:整数型、字符串
x=10
print(id(x))
x=11
print(id(x)) #值变了,ID也变了,生成了新的值,说明原值为不可变类型
整型int
基本使用
1、用途
记录年龄、等级、各种号码
2、定义方式
age=18 #本质是age=int(18)
int除了有造整型的功能,还有数据转换的功能
int('123') #只能将纯数字的字符串(浮点型也可)转换成整型
3、常用操作与内置的方法
赋值、比较、算术
该类型总结
1、存一个值
2、不可变(不可变可hash)
print(hash(10)) #可hash
print(hash([1,2,3])) #不可hash
浮点型float
基本使用
1、用途
记录身高、体重、薪资
2、定义方式
salary=1.3 #本质是salary=float(1.3)
和int一样,除了有造浮点型功能以外,还具备数据转换功能。
x=float('3.1')
print(x,type(x))
#运行结果如下
3.1 <class'float'>
3、常用操作与内置的方式
赋值、比较、算术(可以与整型做比较和运算)
该类型总结
1、存一个值
2、不可变(不可变可hash)
了解知识:
1、复数
x=1-2j
print(x,type(x))
print(x,real)
print(x,imag)
#运行结果如下
(1-2j) <class 'complex'>
1.0
-2.0
2、长整型
只有python2中有长整型的概念
type long
进制转换
十进制:0-9
11=110^1 + 110^0
二进制:0-1
11=12^1 + 12^0
八进制:0-7
11=18^1 + 18^0
十六进制:0-9 A-F
11=116^1 + 116^0
十进制=>其他进制
print(bin(13)) #十进制=>二进制
print(oct(13)) #十进制=>八进制
print(hex(13)) #十进制=>十六进制
#运行结果如下:前两位代表进制
0b1101
0o15
0xd
字符串类型
1、用途
记录描述性质的特征,比如名字、地址、性别
2、定义方式
在单、双、三引号内包含的一串任意类型字符
msg='aaa"bbb"' #msg=str('aaa"bbb"')
和数字类型一样也具备转换数据类型功能,可以将任意类型转换成字符串类型
3、常用操作和内置的方法
优先掌握的操作
1、按索引取值(正向取+反向取):只能取值,不能改值
msg='hello world'
print(msg[0])
#运行结果=h
print(msg[5])
#运行结果=空格
print(msg[-1])
#运行结果
d
2、切片(顾头不顾尾,步长)
从一个大字符串中切出一个小字符串
msg='hello world'
print(msg[0:5]) #默认步长1,切出hello
print(msg[0:5:2]) #步长2,切出hlo
反向切片
msg='hello world'
print(msg[-1:-5:-1]) #反向从右向左切,步长一定要设置,且要设置反向,切出dlrow
msg='hello world'
print(msg[0::1]) #默认切出全部
print(msg[-1::-1]) #默认反向切出全部
3、长度len
msg='你好啊a'
print(len(msg))
#运行结果
4
4、成员运算in和not in
msg='yangyuanhu 老师是一个非常虎的老师'
print('yangyuanhu' in msg)
print('虎' not in msg)
#运行结果
True
True
5、移除字符串左右两边的字符strip:默认去空格
pwd=' 1 23 '
res=pwd.strip(' ') #去除空格,碰到非空格时停止
print(res)
print(pwd)
#运行结果
1 23
1 23
#第一条结果说明空格已去除,第二条结果说明字符串的值不能改变
pwd=input('>>:' ).strip(' ') #pwd='123'
if pwd='123':
print('密码输入正确')
6、切分split:针对有规律的字符串按照某个字符切成列表
info='yyhdsb:18:female'
li=info.split(':') #不定义切分次数则按照冒号全部切分
print(li)
#运行结果
['yyhdsb','18','female']
info='yyhdsb:18:female'
li=info.split(':',1) #定义切分次数则以第一个冒号开始计算切分次数
print(li)
#运行结果
['yyhdsb','18:female']
7、循环
msg='hello'
for item in msg:
print(item)
#运行结果
h
e
l
l
o
该类型总结
1、存一个值
2、有序
3、不可变(不可变可hash)
需要掌握的操作
1、strip,lstrip,rstrip
print('****yes***'.strip('*'))
print('****yes***'.lstrip('*'))
print('****yes***'.rstrip('*'))
#运行结果
yes
yes***
****yes
2、lower,upper
print('AAAbbbb'.lower()) #全部转小写
print('AAAbbbb'.upper()) #全部转大写
#运行结果
aaabbbb
AAABBBB
3、startswith,endswith
print('alex is sb'.startswith('alex'))
print('alex is sb'.endswith('sb'))
#运行结果
True
True
4、format的三种玩法
'my name is {x} my age is {y}'.format(y=18,x='帅哥')
#运行结果
my name is 帅哥 my age is 18
'my name is {name} my age is {age}'.format(age=18,name='帅哥')
#运行结果
my name is 帅哥 my age is 18
5、split,rsplit
msg='a:b:c:d:e'
print(msg.split(':',1))
print(msg.rsplit(':',1))
#运行结果
['a','b:c:d:e']
['a:b:c:d','e']
6、join
msg='a:b:c:d:e'
list1=msg.split(':') #先将字符串切成列表
#运行结果
['a','b','c','d','e']
msg1=':'.join(list1) #再将列表用冒号连接还原成字符串
print(msg1)
#运行结果
'a:b:c:d:e'
7、replace
msg='alex is alex alex is hahaha'
print=(msg.replace('alex','sb')) #所有alex替换成sb
print=(msg.replace('alex','sb',1)) #第一个alex替换成sb
#运行结果
sb is sb sb is hahaha
sb is alex alex is hahaha
8、isdigit:只能判断纯数字的字符串
print('123'.isdigit())
print('12.3'.isdigit())
#运行结果
True
False
例如:
age_of_db=30
inp_age=input('>>>: ').strip()
if inp_age.isdigit(): #增加此句是判断输入的是否是整型数字,如果不是则不运行
inp_age=int(inp_age) #增加此句将字符串转成整型,输入数字就可以比较
if inp_age > age_of_db:
print('too big')
elif inp_age < age_of_db:
print('toll small')
else:
print('you got it')
需要了解的操作
1、find,rfind,index,rindex,count
msg='hello world'
print(msg.index('wo')) #查找wo的索引值
print(msg.find('wo')) #查找wo的索引值
#运行结果
6
6
print(msg.count('l')) #查找l出现了几次
#运行结果
3
2、center,ljust,rjust,zfill
print('yes'.center(10,'=')) #将yes居中显示,左右用=号填充,一共10个字符位
#运行结果
===yes====
ljust靠左显示,右边填充
rjust靠右显示,左边填充
zfill靠右显示,左边0填充
3、expandtabs
print('hello\nworld') #\n 换行
#显示内容
hello
world
print('hello\tworld'.expandtabs(5)) #\t Tab空格5格
#显示内容
hello world
4、capitalize,swapcase,title
print('hello world'.capitalize()) #字符串首字母大写
print('Hello world'.swapcase()) #翻转,大写变小写,小写变大写
print('hello world'.title()) #每个单词的首字母大写
#显示内容
Hello world
hELLO WORLD
Hello World
5、is数字系列
num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='四' #中文数字
num4='Ⅳ' #罗马数字
isdigit:识别bytes、str,最常用
print(num1.isdigit())
print(num2.isdigit())
print(num3.isdigit())
print(num4.isdigit())
#运行结果
True
True
False
False
isdecimal:识别str
print(num2.isdecimal())
print(num3.isdecimal())
print(num4.isdecimal())
#运行结果
True
False
False
isnumberic:str、中文、罗马 比较特殊
print(num2.isnumberic())
print(num3.isnumberic())
print(num4.isnumberic())
#运行结果
True
True
True
6、is其他
print('aaasdfa'.isalpha()) #纯字母组成的字符串
print('aaasdfa123'.isalnum()) #字母或数字组成的字符串
print(' '.isspace()) #是否是全空格
#运行结果
True
True
True
列表类型
1、用途
记录多个值,比如人的多个爱好
2、定义方式
在[ ]内用逗号分隔开多个任意类型的值
li=[1,2,3] #li=list([1,2,3])
除了能造列表类型数据外,还能将其他数据类型转换成列表数据
x=list('hello')
print(x)
原理,先造一个空列表,然后底层类似于for循环,凡是能被for循环循环的数据类型:字符串、字典
3、常用操作和内置的方法
优先掌握的操作
1、按索引存取值(正向存取、反向存取):即可存也可取
li=['a','b','c','d']
print(li[-1])
li[-1]='D'
print(li)
#运行结果
['a','b','c','D']
根据索引即可取值也可改值,可以删除,但是不能新增值
2、切片(顾头不顾尾、步长)
li=['a','b','c','d']
print(li[0:3])
#运行结果
['a','b','c']
3、长度
li=['a','b','c','d']
print(len(li))
#运行结果
4
4、成员运算in和not in
li=['a','b','c','d',[1,2,3]]
print('a' in li)
print([1,2,3] in li)
#运行结果
True
True
5、追加
li=['a','b','c','d']
print(id(li))
li.append('e')
li.append([1,2,3])
print(li)
print(li,id(li))
#运行结果
['a','b','c','d','e',[1,2,3]]
数值改变,内存地址不变,列表类型是可变类型
6、删除
li=['a','b','c','d']
按照元素值去单纯地删除某个元素
res=li.remove('c')
print(li)
print(res)
#运行结果
['a','b','d']
None #无返回值
按照元素的索引去删除某个元素并且拿到该元素作为返回值
li=['a','b','c','d']
res=li.pop(1)
print(li)
print(res)
#运行结果
['a','c','d']
b #有删除掉的返回值
7、循环
li=['a','b','c','d']
for item in li:
print(item)
#运行结果
a
b
c
d
该类型总结
1、存多个值
2、有序
3、可变(不可hash)
需要掌握的操作
1、count 记录某一个元素出现的次数
li=['a','b','c','d','c','e']
li.count('c')
#运行结果
2
2、clear 清空列表
3、copy 赋值一个新的列表列表
4、extend
li=['a','b','c','d','c','e']
li.extend([1,2,3])
print(li)
#运行结果
['a','b','c','d','c','e',1,2,3]
li.append([1,2,3])
print(li)
#运行结果
['a','b','c','d','c','e',[1,2,3]]
5、index(查找元素)(顾头不顾尾,不指定开头结尾默认查找全部)
li=['a','b','c','d','c','e']
print(li.index('a'))
#运行结果
0
结果返回所查找元素的索引值
li=['a','b','c','d','c','e']
print(li.index('d',0,4))
#运行结果
3
6、insert 插入
li=['a','b','c','d','c','e']
print(li.insert('1','egon'))
#运行结果
['a','egon','b','c','d','c','e']
7、reverse 反转
li=['a','b','c','d','c','e']
li.reverse()
print(li)
#运行结果
['e','c','d','c','b','a']
8、sort 排序
li=['a','b','c','d','c','e']
li.sort()
print(li)
#运行结果
['a','b','c','c','d','e']
li=['a','b','c','d','c','e']
li.sort(reverse=True)
print(li)
#运行结果
['e', 'd', 'c', 'c', 'b', 'a']