数据类型(第四讲)
Ctrl+左键点击函数,调出函数解说
math.ceil函数,向上取整,floor向下取整
Python3版本的round不再是四舍五入,是四舍六入五成偶
布尔类型
布尔型,False表示False,其他为True
整数和浮点数,0与0.0表示False,其他为True
字符串和类字符串类型(包括bytes和unicode),空字符串表示False,其他为True
非空字符串布尔值都为True
空值
空值是Python里一个特殊的值,用None表示(首字母大写)。None不能理解为0,因为0 是整数类型,而None是一个特殊的值。None也不是布尔类型,而是NoneType
•None不支持任何运算也没有任何内建方法
•None和任何其他的数据类型比较永远返回False
•None有自己的数据类型NoneType,不能创建其他NoneType对象
•None与0、空列表、空字符串不一样
None永远表示False
字符串
字符串是Python中最常用的数据类型之一,使用单引号或双引号来创建字符串, 使用三引号创建多行字符串。字符串要么使用两个单引号,要么两个双引号,
不能一单一双!
字符串是不可变的序列数据类型,不能直接修改字符串本身,和数字类型一样!
整型在内存中占一个字节,字符串不管中间有多少内容都要单独存储
字符串切片
1.索引默认从0开始
2.切片时左闭右开
3.当是取单个字符的时候,索引超出范围会报错。而切片时不会报错。
4.步长不能为0,也不允许为浮点数
切片左闭右开,包前不包后
[:] 等于切所有字符串
[: : -1]逆序所有字符串
int()将字符串转换成整型
str()将整型转换成字符串
字符串的组成方式:
1)字符串相加
2)字符串格式化
字符串格式化
字符串format()格式化方法
前面说过%百分符格式化方法。Python官方最近逐步在推广str.format()方法的格式化。
print(’{}年龄{}’.format(amy,18)) print(’{1}年龄{0}’.format(18,amy))
name = “XXX”
age = “XX”
print(f'{name}的年龄是{age}岁) #3.6.4以上版本
字符串常见操作
1)find 2)index 3)replace 4)split 5)startswith 6)endswith 7)lower 8)upper 9)strip 10)isalpha 11)isdigit 12)isalnum
S = hello python
print(S.find("e")) #调用find函数查找“e”的位置,运行结果为1
print(S.find("l")) #运行结果为2
#当查找字符有多个重复时,返回最先被查找到的那个位置
print(S.find("m")) #运行结果为-1
#当查找不存在的字符时,查找失败,返回结果为-1
str.rfind(),从左往右查找字符串出现的最高值
普通str.find函数,默认就是str.lfind
str.index()函数未找到字符时,会报错
replace不会改变原字符串,是先复制再替换
split,分割函数,分割后返回列表
startswith和endswith,返回的是布尔值
strip函数,去头尾空格
li =["1","2"."3","4"]
s = ''.join(li)
print(s) #运行结果为1234
数字类型不是可迭代类型
基础数据类型(第五讲)
列表
列表是Python中最基本也是最常用的数据结构之一。列表中的每个元素都被分配一个数字作为索引, 用来表示该元素在列表内所排在的位置。第一个元素的索引是0,第二个索引是1,依此类推。
Python的列表是一个有序可重复的元素序列,可嵌套、迭代、修改、切片、追加、删除,成员判断。
从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的 指针。
创建方式
列表是Python中最基本也是最常用的数据结构之一。列表中的每个元素都被分配一个数字作为索引,用来表示该元素在列表内所排在的位置。第一个元素的索引是0,第二个索引是1,依此类推。
Python的列表是一个有序可重复的元素序列,可嵌套、迭代、修改、切片、追加、删除,成员判断。
从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针。
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可
li3=list("hello")
print(li3)
运行结果为["h","e","l","l","o"]
重新赋值
li1 = ["a","b","c","d"]
li1[0] = "A"
print(li1)
返回["A","b","c","d"]
在原有基础上修改,并没有建立新ID
列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一。要访问它的某个元素, 以方括号加下标值的方式即可。注意要确保索引不越界,一旦访问的索引超过范围,会抛出异常。所以,一定要记得最后一个元素的索引是len(list)-1。
删除元素
del li2[下标],删除元素;或者del li2,删除整个列表
remove(“字符串”)
pop(),删除并返回删除值,如果没有输入下标,则默认最后一个字符串
多看函数说明确定函数用法
列表的特殊操作
列表组合:
li1 =[1,2,3,4]
li2 =[5,6,7,8]
li3 =li1+li2
输出[1,2,3,4,5,6,7,8]
li4=[1,2,3]
li5=[1,2,3]
li4+li5=[1,2,3,1,2,3]
列表乘法:
li5*3=[1,2,3,1,2,3,1,2,3]
判断元素是否在列表内部:
用in表示,返回布尔值
迭代(for循环遍历都是可迭代的对象)列表中的每个元素:
li = [1,2,3,4]
for i in li:
print(i)
输出结果:
1
2
3
4
列表常用函数
len(list) 返回列表元素个数,也就是获取列表长度
max(list) 返回列表元素最大值
min(list) 返回列表元素最小值
list(seq) 将序列转换为列表
list.reverse() 将列表反转
list.sort() 排序,默认升序
list.sort(reverse=True) 降序排列
字符之间的大小比较,是比ASCII码的大小
li8[::-1] #逆序输出
print(li.reverse())#直接打印返回none
li=[2,3,4,5]
li.reverse()
print(li) #得到逆序
li.sort() #得到升序
li.sort(reverse=True) #得到逆序
切片
切片指的是对序列进行截取,选取序列中的某一段。
切片的语法是: list[start🔚step]
以冒号分割索引,start代表起点索引,end代表结束点索引,step代表步长。省略start表 示以0开始,省略end表示到列表的结尾。注意,区间是左闭右开的!
用下标取值,超出范围会报错,但是切片不会
li[][],可以去到列表中小列表的值
count函数在统计时,只统计一级列表里出现的元素次数,嵌套列表中的元素,不统计
如果需要统计嵌套列表中的元素,则需先取出嵌套列表
列表的内置方法
append(obj) 在列表末尾添加新的对象
count(obj) 统计某个元素在列表中出现的次数
extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
index(obj) 从列表中找出某个值第一个匹配项的索引位置
insert(index, obj) 将对象插入列表
pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 remove(obj)移除列表中某个值的第一个匹配项
remove(obj) 移除列表中某个值的第一个匹配项
reverse() 反向列表中元素
sort([func]) 对原列表进行排序,默认升序
copy() 复制列表
clear() 清空列表,等于del lis[:]
元组
元组没有sort和reverse,可以用sorted,reversed
元组类型不支持修改
tu1=(1,2,3,4)
tu1+(5)
输出结果为(1,2,3,4,5)
元组中嵌套的列表支持修改,元组中的元组不行
字典
Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计 算value的地址,具有非常快的查取和插入速度。包含的元素个数不限,值的类型也可以是其它任何 数据类型!
但是字典的key必须是不可变的对象,例如整数、字符串、bytes和元组,但使用最多的还是字符串。 列表、字典、集合等就不可以作为key。同时,同一个字典内的key必须是唯一的,但值则不必。
字典的每个键值对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,例如: d = {key1 : value1, key2 : value2 }
字典可精确描述为不定长、可变、散列的集合类型
字典的key值不可变
dict()函数是Python内置的创建字典的方法。
dict(mapping)
dict(iterable)
dict(**kwargs)
内置map()
a=[1,2,3,4]
list(map(str,a))
[‘1’,‘2’,‘3’,‘4’]
a =[1,2,3]
b =[4,5,6]
print(dict(zip(a,b)))
输出{1:4,2:5,3:6}
字典是集合类型,不是序列类型,因此没有索引下标的概念,更没有切片的说法。但是,与list 类似,字典采用把相应的键放入方括号内获取对应值的方式取值。
增加就是往字典插入新的键值对,修改就是给原有的键赋予新的值。由于一个key只能对应一个 值,所以,多次对一个key赋值,后面的值会把前面的值冲掉。
使用del关键字删除字典元素或者字典本身,使用字典的clear()方法清空字典
查找不在key值当中的值,会报错;直接赋值可以更改字典
字典没有remover,用del,pop删除
get(key) 返回指定键的值,如果值不在字典中,则返回default值
items() 以列表返回可遍历的(键, 值) 元组对
keys() 以列表返回字典所有的键
values() 以列表返回字典所有的值
dicl = {"name":"amy","height":"1.6","sex":"male"}
print(dicl.get("sex"))
运行结果为male
#查找不存在的关键字,会返回none
从Python3.6开始遍历字典获得的键值对是有序的!
字节
在Python3以后,字符串和bytes类型彻底分开了。字符串是以字符为单位进行处理的,bytes类型是 以字节为单位处理的。
bytes数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样,也是不可变的序列 对象。
Python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等。可以通过调用bytes()生成 bytes实例,其值形式为 b‘xxxxx’,对于同一个字符串如果采用不同的编码方式生成bytes对象,就会 形成不同的值。
a = bytes(‘hello’) 运行报错
b = bytes(‘hello’,encoding=“utf8”)
集合
set集合是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素。集合使用大括号({})框 定元素,并以逗号进行分隔。但是注意:如果要创建一个空集合,必须用 set() 而不是 {} ,因为后者 创建的是一个空字典
集合数据类型的核心在于自动去重。
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果。
集合是可变的数据类型,无序不重复
可以添加数字和字符串,不可添加列表
可以通过update()方法,将另一个对象更新到已有的集合中,这一过程同样会进行去重
update(hello)#更新集合
set('h','e','l','o')
x = {'b','n','o','r','u'}
y = {'e','g','l','o'}
x & y = {'o'}
x | y = {'b','e','g','l','n','o','r','u'}
x - y = {'b','n','r','u'}
通过remove(key)方法删除指定元素,或者使用pop()方法。注意,集合的pop方法无法设置参数,删除指定的元素
需要注意的是,集合不能取出某个元素,因为集合既不支持下标索引也不支持字典那样的通过键值 对获取。
可变类型与不可变类型
可变类型,值可以更改,但是ID内存不变
不可变类型在更改值后,内存ID改变
列表,字典可变,数字字符串元组不可变
以list为例。list在append之后,还是指向同个内存地址,因为list是可变类型,可以在原处修改。
以int类型为例:i=5,实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对 象,i引用自这个新的对象