Python基础数据类型(字节、列表)
人生苦短我学Python---第五讲 Python基础数据类型笔记及作业
教育机构: 逻辑教育
授课方式:腾讯课堂
教 师:Amy
一. 字节(bytes)
1. 字节介绍(掌握)
在 Python3 以后,字符串 和 bytes 类型彻底分开了。字符串是以字符为单位进行处理的,bytes 类型是以字节为单位处理的。
bytes 数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样,也是不可变的序列对象。
Python3 中,bytes 通常用于网络数据传输、二进制图片和文件的保存等等。
2.字节创建(掌握)
可以通过调用 bytes() 生成 bytes 实例,其值形式为 b'xxxxx' ,对于同一个字符串如果采用不同的编码方式生成 bytes 对象,就会形成不同的值。
# 创建字节: b"***"
bt_1 = b"hello yaoqi"
print(type(bt_1)) # <class 'bytes'>
# 创建字节: bytes(string, encoding[, errors]) -> bytes
bt_2 = bytes("hello yaoqi", encoding = "utf8" ) # 万国码 utf8
print(bt_2) # b'hello yaoqi'
print(type(bt_2)) # <class 'bytes'>
3.字节与字符串转换
那在实际应用中,我们通常会将 bytes类型 与 str类型 做转换。
bytes 转为 str: bytes.decode()
#将字节转换成str类型 decode() 解码
bt_3 = b"hello"
print(type(bt_3)) # <class 'bytes'>
st_1 = bt_3.decode()
print(st_1) # hello
print(type(st_1)) # <class 'str'>
str 转为 bytes: S.encode()
#将字符串转换成字节:编码 encode()
st_2 = "yaoqi"
bt_4 = st_2.encode()
print(bt_4) # b'yaoqi'
print(type(bt_4)) # <class 'bytes'>
二. 列表(list)
1. 列表介绍(掌握)
列表是 Python 中最基本也是最常用的数据结构之一,它是一个有序可重复的元素集合。从数据结构角度看,Python 的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针。
我们可对列表进行 修改、切片、追加、删除、嵌套、迭代、成员判断 等操作。
2.列表创建(掌握)
创建一个列表,只要把“逗号”分隔的不同的数据元素,使用方括号括起来即可。
除此之外,我们还可以直接通过 “list()” 来进行创建列表。
# 创建列表 注意是英文状态下的方括号
li_1 = [] # 这是一个空列表
print(li_1) # []
print(type(li_1)) # <class 'list'>
li_1 = ["yao", "qi", 21, 35.6, True, 35.6]
print(li_1) # ['yao', 'qi', 21, 35.6, True, 35.6]元素可迭代
# 创建列表 list()
li_2 = list() # 这是一个空列表
print(li_2) # []
li_2 = list("yaoqi")
print(li_2) # ['y', 'a', 'o', 'q', 'i']
print(list("337968")) # ['3', '3', '7', '9', '6', '8']注意数字是整体存储不能拆分
注意:
变量名最好不使用 list
列表里的元素可以是任意类型
iterable 表示可迭代的对象,简单来说就是可以一个一个元素取出来的。比如:str
3.访问(查)列表内的元素(掌握)
列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一 。要访问它的某个元素,以方括号加下标值的方式即可。
注意要确保索引不越界,一旦访问的索引超过范围,会抛出异常。所以,一定要记得最后一个元素的索引是 len(list)-1。
思考:li_1 = [1,2] 是如何取出元素的呢?
#思考:如何取出元素的呢?
li_1 = [1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 18]
print(len(li_1) - 1) # 10这是最大的索引
print(li_1[0]) # 1
print(li_1[5]) # 6
print(li_1[len(li_1) - 1]) # 18 这是最大索引的元素
4.修改列表内的元素(掌握)
直接取出元素进行重新赋值
思考:li_2 = ['a', 'b', 'c'] 是怎么将 'a' 改为 'A' 的呢?
#思考:li_2 = ['a', 'b', 'c'] 是怎么将 'a' 改为 'A' 的呢?
li_2 = ['a', 'b', 'c']
li_2[0] = "A"
print(li_2) # ['A', 'b', 'c']
5.删除列表内的元素(掌握)
直接取出元素,再通过 del语句或者 list.remove() 或者 list.pop() 进行删除
del语句:del li[idx]
list.remove() 根据元素删除
list.pop() 最后一个开始弹出
li_3 = list("123456")
print(li_3) #['1', '2', '3', '4', '5', '6']
del li_3[3]
print(li_3) #['1', '2', '3', '5', '6']谁见到我家小4了吗?
li_3.remove("5") #删除第一个出现的值。如果值不存在,则引发ValueError。
print(li_3) #['1', '2', '3', '6']我家小5是不是去找小4了,怎么也不见了
li_3.pop() #删除并返回索引处的项(默认最后一个),如果列表为空或索引超出范围,则引发索引器错误
print(li_3) #['1', '2', '3']完了完了,我家小6子也跟前不见了
6.列表的特殊操作(熟悉)
列表相加与整数相乘
注意:
不是对应位置相加也不是对应位置相乘,而是拼接
# 想一想为什么不是[7,8,9]
lis_1 = [1, 2, 3]
lis_2 = [4, 5, 6]
print(lis_1 + lis_2) #[1, 2, 3, 4, 5, 6]
# lis_3 * 3 是成3倍展开
lis_3 = [1, 2, 3]
print(lis_3 * 3) #[1, 2, 3, 1, 2, 3, 1, 2, 3]
列表与列表不能相乘,也不能相除
列表成员判断
#来,吃个粟子就明白了
lis_4 = [1, 2, 3, 4, 7, 8]
if 7 in lis_4:
print("7在教室里上课")
else:
print("7不在教室里哦")
7.常用内置函数(熟悉)
len() --> 返回长度,也就是元素个数
max() --> 返回最大值
min() --> 返回最小值
lis_1 = list("abcdef")
print(len(lis_1)) #返回长度6
print(max(lis_1)) #返回最大值f 字符串与整数不能比较
print(min(lis_1)) #返回最小值a
注意:唉!老师你别敲黑板行吗?
字符串与字符之间比较转为 ascii
字符串与整数比较报错
以上方法都是 python 内置方法
8.列表的排序与反转(熟悉)
将列表反转排序,默认升序
list.reverse()
list.sort(reverse=Fasle)
# 将列表反转排序,默认升序
lis_2 = [1, 2, 3, 4, 5, 6, 7]
print(lis_2[::-1]) # [7, 6, 5, 4, 3, 2, 1]
lis_2.reverse() # 这是内置的方法不能打印
print(lis_2) # [7, 6, 5, 4, 3, 2, 1]
lis_2.sort() # 默认是升序的
print(lis_2) # [1, 2, 3, 4, 5, 6, 7]
lis_2.sort(reverse=True) #加参数后是逆序
print(lis_2) # [7, 6, 5, 4, 3, 2, 1]
注意: 以上方法是列表的方法
9.列表的切片(重点掌握)
slice(start, stop[, step])
切片模式:a[start:stop:step]
start为起始位置默认为0
stop为结束位置默认最后一个元素
[, step]为可选参数:步长,默认为1
思考:
li_a = [1,2,3,4,5,6,7] 取 [2,3,4] 以及取出 [2,4,6]
# li_a = [1,2,3,4,5,6,7] 取 [2,3,4] 以及取出 [2,4,6]
li_a = [1, 2, 3, 4, 5, 6, 7]
print(li_a[1:4]) #[2, 3, 4]默认步长为1 左闭右开
print(li_a[1::2]) #[2, 4, 6] 步长为2
#这个粟子好好吃 一个一个取出
li_b = [1, 2, 3, 4, ['yao', 'qi']]
print(li_b[4]) #取出['yao', 'qi']
print(li_b[4] [0]) #取出yao
print(li_b[4] [1]) #取出qi
10.字符串常见操作(熟悉)
L.append(object) --> 在列表末尾添加新的对象
L.count(object) --> 统计某个元素在列表中出现的次数
L.extend(iterable) --> 用新列表扩展原来的列表
L.index(value) --> 从列表中找出某个值第一个匹配项的索引位置
L.insert(index, object)--> 将对象插入列表
L.pop([index]) --> 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
L.remove(value) --> 移除列表中某个值的第一个匹配项
L.reverse() --> 反向列表中元素
L.sort(reverse=False) --> 对原列表进行排序
L.copy() --> 复制列表
L.clear() --> 清空列表
#请慢慢品尝刚出炉的粟子
lis_1 =list("acbcd")
lis_1.append('yaoqi') #在列表末尾添加新的对象
print(lis_1) #['a', 'c', 'b', 'c', 'd', 'yaoqi']
print(lis_1.count('c')) #统计某个元素在列表中出现的次数
print(lis_1.index('c')) #从列表中找出某个值第一个匹配项的索引位置
lis_1.insert(1,'我在这') #将对象插入列表
print(lis_1) #['a', '我在这', 'c', 'b', 'c', 'd', 'yaoqi']
lis_1.pop() #移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
print(lis_1) #['a', '我在这', 'c', 'b', 'c', 'd']
lis_1.pop(1) #让你调皮,走你
print(lis_1) #['a', 'c', 'b', 'c', 'd']
lis_1.remove("c") #移除列表中某个值的第一个匹配项,第一个C被余除了
print(lis_1) #['a', 'b', 'c', 'd']
lis_1.reverse() #反向列表中元素,逆序输出
print(lis_1) #['d', 'c', 'b', 'a']
lis_1.sort(reverse=False) #对原列表进行排序,我又反回来了
print(lis_1) #['a', 'b', 'c', 'd']
lis_2 = ["yao", "qi"]
lis_1.extend(lis_2) #用新列表扩展原来的列表
print(lis_1) #['a', 'b', 'c', 'd', 'yao', 'qi']
lis_1.clear() #清空列表
print(lis_1) # [] 哈,整个世界都安静了
三. 后记
1.英文基础不好,好多函数拼写不出,只能靠死记硬背,但愿熟能生巧。
2.L.copy() --> 复制列表,这个复制函看是简单,真写代码时不知如何下手呢,累了,也不百度了,还是等今晚听Amy甜甜的讲解吧。哈哈