6. 数据类型相关方法
数据类型装换和方法
整型
在python中,age=10,相当于age=Int(10),int()函数就是将一个对象转换成整型的数据,需要注意的是,转换字符串的时候,只能将纯数字的字符串转换成整型(浮点数也一样),否则会报错
十进制转换成二进制——bin()函数
十进制转换成八进制——oct()函数
十进制转换成十六进制——hex()函数
二进制转换成十进制 ——int('10010',2)第二个数字2是说明前面的数字是二进制的意思,八进制就写8,十六进制就写16
内置方法:基本上没啥方法,多在算数运算和比较运算中使用
浮点型
float()将一个对象转换成浮点数类型,
虚数
complex(实部,虚部)
可以了解一下位运算相关知识
字符串类型
str()将任意类型的数据转换成字符串
s1='hello world'
# 按照索引取值和切片
s1[3] # 得到l
s1[1:7:2] # 从索引1开始到索引8结束,每隔两个字符(步长)取一个值得到el o
s1[-1:-3] # 得到lr
s1[::-1] # 倒着取全部的字符串
### 需要注意的是 字符串不能通过索引进行改值,因为是不可变的数据类型
# 统计长度
len(s1)
# in和not in
# 判断字符是否存在在字符串中,返回true或false
'l'in s1 # true
# strip() 移除字符串两侧的符号,只去除两边,不去除中间的
s2='***nihao/\.\//\***'
s3=s2.strip('*') # 括号里面是想要去掉的符号,剩下nihao/\.\//\
s4=s2.strip('*/\.') # 去掉两边的多种符号,只剩下nihao
lstrip() # 只去除左边的(left)
rstrip() # 只去除右边的(right)
### 应用在输入的时候对字符串进行处理(去掉两边的空格)
# split和rsplit切分方法,按照某种分隔符进行拆分,得到的是一个列表(默认分隔符是空格)
s1.split(' ') # 按照空格进行拆分,得到['hello','world']
s1.split(' ',1) # 设置分隔次数(就是从第一个空格开始分隔,分成两个元素的列表)
s1.rsplit(' ',1) # 从右向左开始切分
# s1.upper() 英文字母全部大写 HELLO WORLD
# s1.isupper() # 判断是否全是大写
# s1.lower() 英文字母全部小写 hello world
# s1.islower() # 判断是否全是小写
# s1.isdigit() # 判断是否全是数字
# s1.title() 对单词的首字母的大写 Hello World
# s1.startswith('h') 判断是不是以h开头的字符串
# s1.endswith('d') 判断是不是以d结尾的字符串
# s1.isdigit() # 判断是否全是数字
# join()将列表拼接成字符串
l1=['ni','hao','ya']
'!'.join(l1) # 用!l1的三个元素连起来——》'ni!hao!ya'
# replace()替换方法
s1.replace("l",'L',1) # 将第一个l替换成大写的L,如果不写数字默认替换掉所有
# 了解内容
# find()和index()
s1.find('ll')
s1.index('ll')
# 两者都是返回查找的子字符串的第一个字符的索引,不同之处在于find如果找不到返回的是-1,index如果找不到直接报错,所以使用find要好一点
# s1.count('l') # 返回l在字符串中出现了多少次
# center()rjust()ljust()zfill()
'nihao'.center(20,'*') # 创造一个20字符长度的字符串,nihao居中显示,其他的位置用*填充
'nihao'.rjust(20,'*') # 创造一个20字符长度的字符串,nihao右对齐显示,其他的位置用*填充
'nihao'.ljust(20,'*') # 创造一个20字符长度的字符串,nihao左对齐显示,其他的位置用*填充
'nihao'.zfill(20) # 创造一个20字符长度的字符串,nihao右对齐显示,其他的位置用0填充,z是zero的意思
# s1.expandtabs(10) # 当s1中有制表符时,指定制表符的长度,这里指定的是10个字符长度
# s1.capitalize() # Hello world整个字符串的第一个首字母大写
# s1.swapcase() # 将字符串中的大写字符变成小写,小写字符变成大写
# is系列,判断字符串中的字符的种类,返回true和false
.islower() # 全是小写
.isupper() # 全是大写
.istitle() # 单词的首字母是大写
.isalnum() # 全是字母或者数字
.isalpha() # 全是字母
.isdecimal() # 全是数字
.isspace() # 全是空格
.isidentifier() # 判断标识符是不是合法的,如果是关键字的话返回true
# .numberic()和.digit()和.isdecimal()的区别
.isnumberic() # 能够判断是不是阿拉伯数字、罗马数字、中文数字
.isdigit() # 只能判断是不是阿拉伯数字(Unicode和bytes类型的数字)
.isdecimal() # 智能判断是不是unicode显示的数字(python3中默认是unicode)
列表
list()方法,将一个可迭代对象变成列表,元素就是可迭代对象的每一个元素,列表是有序的
列表可以通过切片和索引进行取值
l1=[111,'nihao',3.3]
# 查
l1[0] # 结果是111
l1[0:3:2] # 结果是切片相当于一种copy,是一种浅copy,不改变本身的值,只是复制一份
# 改
l1[0] =222 # 索引存在的话可以直接改值,不存在的话直接报错[222,'nihao',3.3]
# 增
l1.append('qidian') # 在列表后面追加值[222,'nihao',3.3,'qidian']
l1.insert(0,'ni') # 在索引为0的位置直接添加值['ni',222,'nihao',3.3,'qidian']
l1.extend('abc') # 迭代着追加在列表的后面['ni',222,'nihao',3.3,'qidian','a','b','c']
# 删
del l1[0] # 通用的删除方法,单纯的删除,但是没有返回值,无法赋值
l1.pop(2) # 根据索引删,不指定索引(括号里面不填值),默认删除最后一个,有返回值,返回删除的那个值
l1.romove('nihao') # 按照对象删,制定删除的对应元素,返回值是none
# in和 not in 也适用于列表
# 一些需要掌握的内置方法
l1.count() # 查找元素出现的次数
l1.index() # 查找元素的索引
l1.clear() # 清空元素,将列表变为空列表
l1.reverse() # 将元素的顺序颠倒
l1.sort() # 默认是从小到大排序(升序),传入参数reverse=true(默认是false),变成元素从大到小排序(降序)
### 在使用sort方法时,列表内元素必须是同种类型才可以,字符串的排序是按照ASCII码表的顺序来比较的,在进行字符串的比较的时候,是按照相对应的位置的字符来比较的,同理列表的比较也一样
不建议在循环中修改列表等可变数据类型,因为这样会改变列表的索引
队列和堆栈
队列:一种数据结构,特点是FIFO(first in first out)像是管道
堆栈:特点是LIFO(last in first out)像是水桶
元组
元组是一种不可变的数据类型,相当于一个不可变的列表,但是元组内的元素不能重复,元组的作用就是按照索引存放多个值,只用于读不能修改
对于元组中存放的可变的数据类型(比如说列表),是可以进行修改的,但是列表的内存地址是没有改变的
元祖的函数是tuple()
元祖的表示是(1,2,3,4,5,6),需要注意的是,只存放一个数据的时候,表示为(1,)(1)表示的是整数1
# 无法进行修改,所以增删改都不可以使用,只能使用索引查看,可以切片查看,可以使用in和 not in判断,方法只能使用index和count,与上面的原理一样,这里就不说了
字典
字典是键值对组成的,键(key)和值(value)是一一对应的
key必须是不可变的数据类型,并且不可重复,value可以是任何类型
表示{'name':'david','age':18}
创建字典的函数方式:dict()
# 空字典{}
# 字典的创建
d=dict(x=1,y=2,c=3)
l=[[1,'a'],[2,'b'],[3,'c']]
d1=dict(l) # 直接得到字典{1:'a',2:'b',3:'c'}
key1=[1,2,3]
none
{}.fromkeys(key1,none) # 得到字典{1:none,2:none,3:none},原理将前面的可迭代对象的每一个元素都当做key,值是同一个,都是none,这种方式常常用于快速初始化一个字典,值的部分通常不使用可变的数据类型,一般是none,或者是可变的数据类型
# 改/增
d1={1:'a',2:'b',3:'c'}
d1[1] # 查看值,如果键值对不存在会直接报错
d1.get(1,'当key不存在的时候get方法的返回值') # 是为了弥补使用索引进行查询的时候,如果字典中没有对应的键会直接报错,但是get方法会返回none
d1[1]='asd' # 键存在的话就是直接修改值
d1[4]='d' # 如果key不存在的话就直接增加键值对
len(d1) # 计算长度
# 成员运算in 和 not in判断的是key
# 删除
del d1[1] # 直接删除键值对
d1.pop(1) # 默认删除最后一个,或者按照键删除,返回删除的key对应的值
d1.popitem() # 随机删除,返回删除键值对组成的元组
# 其他的一些方法,下面是在python2中得到的结果,在python3中进行了优化,将每个得到的结果换成了迭代器,为了节省内存空间
d1.keys() # 得到key组成的列表
d1.values() # 得到value组成的列表
d1.items() # 得到键值对组成的元组形成的列表
d1.clear() # 全删除,清空
d1.update(d2) # 在d1中有的键值对,还继续保留,d1中没有d2中有的键值对,将其增加到d1中
d1.setdefault(1,'abc') # 如果键值在原字典中存在,就不会对原字典进行修改
d1.setdefault(5,'e') # 如果键不存在,就将键和默认值形成键值对添加到字典中
集合
在{}内用逗号分隔开多个元素,元素满足以下条件:
集合内元素必须是不可变类型
集合内元素无序
集合内元素没有重复
{}是空集合,集合的函数是set()
集合有两个用处,一个是关系运算,一个是去重
# 类型转换
s=set('abcde') # {'a','b','c','d','e'}要注意的是,集合里面放的是不可变的数据类型
# 集合的关系运算与相关的内置方法
s1={1,2,3,4,5}
s2={2,3,4,5,6}
# 取交集,两个集合共有的元素
s1&s2 # {2,3,4,5}
s1.intersection(s2)
# 取并集,两个集合相加去重
s1|s2 # {1,2,3,4,5,6}
s1.union(s2)
# 取s1独有的元素(差集)
s1-s2 # {1}
s1.difference(s2)
# 对称差集,就是两个元组所独有的元素组成的集合
s1^s2 # {1,6}
s1.symmetric_difference(s2)
# 父子集,包含的关系若s1的元素包含s2里面的元素,就称s1是父集合,s2是子集合(两个集合相等就互为父子)
s1>s2 # 用大于小于表示,返回true或者false,这里的s1和s2不存在父子关系,返回false
s1.issuperset(s2)
s1.subset(s2)
# 集合的去重(有局限性)
# 局限1.只能针对不可变得数据类型进行去重
# 局限2.无法保证原来的顺序
# 集合可以计算长度len()方法
# 集合可以进行成员运算in和not in
# 集合可以用for方法进行循环
# s1.remove(1) # 可以删除元素,但是删除不存在的元素会报错所以有了discard方法
# s1.discard(9) # 同样可以删除,但是删除不存在的元素的时候什么都不会做,相当于没进行操作
# s1.update(s3) # 将新集合加到原来的集合中在将重复的去掉(相当于取并集)
# update方法可以和交集并集等方法运算的函数结合使用,下面举个例子就明白了
s1.deiierence_update(s2) # 就是先去差集然后在进行update
s1.clear() # 将集合进行清空
s1.pop() # 随机删除
s1.add(8) # 增加元素
s1.isdisjoint() # 如果两个集合完全独立,没有共同部分,返回true
数据类型总结
| 按照存值个数区分 | |
|---|---|
| 只能存一个值,称为标量/原子类型 | 数字、字符串 |
| 可以存多个量,称为容器类型 | 列表、元组、字典 |
| 按访问方式区分 | |
|---|---|
| 直接访问,只能通过变量值访问某个值 | 数字 |
| 顺序访问:可以通过索引访问,也叫序列类型 | 字符串、列表、元组 |
| key访问:又被称为映射类型 | 字典 |
| 按照可变不可变区分 | |
|---|---|
| 可变类型 | 列表、字典 |
| 不可变类型 | 数字、字符串、元组 |

浙公网安备 33010602011771号