字节
字节介绍
在python3以后,字符串和bytes类型(字节)彻底分开了。
字符串是以字符为单位进行处理的。
bytes类型是以字节为单位处理的。
bytes数据类型在所有的操作和使用甚至内置方法上和字符数据类型基本一样,也是不可变的序列对象。
python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等。(比如爬虫,爬图片时候读取到的就是字节)
字节创建
方式一:b""
取变量名的时候可以取bt。bt为bytes简称。
bt_1 = b"hello"【首先是正常的字符串,然后在字符串前➕小写的b】就为字节
方式二:bytes()
字符串转字符:
bytes(string, encoding[, errors])
如果是字符串转换为字节需要➕encoding
gbk:中国码 utf8:万国码
print=(bttes(“hello”, encoding=“utf8”))
打印输出得到:b’hello’
字节与字符串的转换
bytes转为str
字节就是乱码,那时候看不懂,字符串就是看得懂的内容。
所以要将字节转为字符串就是解码的过程。
decode就是解码
bytes转为str:变量名.decode()
str转为bytes
将字符串转为字节(将看得懂的转为看不懂)这过程为编码
encode就是编码
str转为bytes:变量名.encode()
已知:字节是一个不可变的序列,序列就可以用下标。
当bytes取下标时,返回的不是下标对应元素,而是ascii。
所以ascii就可以算为字节。
上图得到的119就是ascii。而不是得到w
列表
列表的介绍
列表是python中最基本也是最常用的数据结构之一,它是一个有序可重复的元素集合。从数据结构角度看,python的列表是一个可变长度的顺序储存结构,每一个位置存放的都是对象的指针。
我们可对列表进行:修改、切片、追加、删除、嵌套、迭代、成员判断等操作。
列表的创建
方式一:[]
以英文状态下一对方括号[] 创建空列表
li=[] 【将空列表赋值给了变量li】
li_2 = [“clara”, 21, 20.5, True]
打印输出结果:
1、元素可以是任意类型
2、元素可以重复
方式二:list() 类的方式创建
list() 直接打印输出得到一个空列表【创建空的列表】
list(iterable):
iterable代表可迭代,也意味着可以将元素逐个取出。
例如:list(“hello”)打印输出得到
注意:该方法非序列类型不可用,比如整数。整数是整体储存不可以逐一取出。会报错。
总结
1、变量名最好不使用list。
2、列表内的元素可以是任意类型。
3、iterable表示可迭代对象,简单来说就是可以逐个元素取出的比如str。
查(访问)列表内的元素
列表从0开始为每一个元素顺序创建下标索引,也是左闭右开区间(总长度减一)。同字符串切片一致
注意:确保索引不越界,一旦访问超过索引范围会报错,所以一定要记住最后一个元素是len(list)-1。 len(list)为list列表下标总数(也可代表元素个数或者列表总长度)。
列表内的元素修改
直接取出元素进行重新赋值
通过下标取值再重新赋值
列表内的元素删除
直接取出元素,再通过del语句或者list.remove()或者list.pop()进行删除
del语句:
del li[下标数]
删除某个元素
del li 为删除整个列表
list.remove():
list.remove():是输入要删除的值而不是下标。
注意:不能直接打印输出xx.remove 会返回空值。因为改变的是列表本身没有返回值。
list.pop():
如果什么都不传直接()则代表默认删除最后一个元素。
也可以传索引,传了索引就删除索引对应的元素 直接填写xx.pop(1) 不用填写xxx.pop([1])
图中:两个pop 直接将5和6都删除了
根据下标删除方式:
总结
del 语句 :del xx[下标]或者del xx
list.remove():根据元素删除 不填写下标
list.pop():默认从最后一个开始删除,可以直接在()内填写对应下标数进行下标对应元素删除。
列表特殊操作
列表相加
列表与列表之间使用+代表列表的拼接。
列表的乘法
列表与列表之间不能用 *(乘法)
但是列表能与数值(整数)进行 *(乘法)代表将列表按照数值进行扩展【倍数的展开】。如图所示:
不能使用减法和除法
只能用拼接和展开。
成员判断
in:2 in [1,2,3]
not in:2 not in [1,2,3]
返回的是bool值。
迭代
快速取出每一个元素:
遍历: for aa in bbb
例:
列表特殊操作注意点
列表相加:不是对应位置的数值相加,而是内容的拼接
与整数相乘:列表与列表不能相乘。与整数相乘代表内容按倍展开。
成员判断:返回的是bool值。
迭代:相当于取出每一个元素。
列表常用内置函数
通过type查询如果打印得到:builtin_function_or_method代表为内置的方法或者函数。
len():列表长度
序列类型的都可以返回长度,也可以算做元素的个数。 字符串、列表都可以使用。
li = list(“abc”)
print(len(li))打印输出结果为3
max():最大值(返回元素的最大值)
li = list(“abc”)
print(max(li))打印输出结果为c
min():最小值(返回元素最小值)
li = list(“abc”)
print(min(li))打印输出结果为a
注意
列表、字符串等序列内容中元素类型不同不能进行比较,会报错。
例如将 整数 与 字符串进行比较
字符串与字符串可以通过ascii进行比较
整数与浮点数可以进行比较
但是字符串与数值不能进行比较。
列表的排序与反转
li_3 = [1,2,34,4,5,6,4,7,10]
将列表逆序取出
li_3 = [1,2,34,4,5,6,4,7,10]
方法一:切片
print(li_3[::-1]) 打印输出[10, 7, 4, 6, 5, 4, 34, 2, 1]
方法二:li_3.reverse() 逆序取出,没有返回值。
li_3.reverse()
print(li_3)
排序
升序:L.sort() 默认为升序排列。
li_3 = [1,2,34,4,5,6,4,7,10]
li_3.sort()
print(li_3)
打印输出结果:[1, 2, 4, 4, 5, 6, 7, 10, 34]
降序:L.sort(reverse=True) :降序排列。将升序的结果反过来就为降序。
方法一:
li_3 = [1,2,34,4,5,6,4,7,10
li_3.sort(reverse=True)
print(li_3)
打印结果:[34, 10, 7, 6, 5, 4, 4, 2, 1]
方法二:
先将li_3升序后
再使用reverse反转。
注意:这里sort 不会直接返回数值所以要进行两步操作。不可以l.sort().reverse()这样操作。
列表切片
同字符串切片一致:
变量(起始值:终止值:步长)
注意:步长默认为1,不能为0也不能为浮点数。
嵌套列表取值
li_5 = [1, 2, 3, [“amy”, 1]]
从li_5取出amy
print(li_5[3][0])
首先li_5中【3】为整个嵌套列表
【“Amy”, 1】
之后【0】嵌套列表的amy下标