Python基础学习(07)
一、今日内容大纲
- 基础数据类型的补充
- 数据类型之间的转换
- 编码的进阶
二、基础数据类型的补充
-
str 操作的补充
-
capitalize 函数:首字母大写
print(s1.capitalize()) # result: Raigor
-
swapcase 函数:大小写反转
print(s1.swapcase()) # result: rAIgOR
-
title 函数:每个单词的首字母大写(非字母隔开的字母算作一个单词)
msg = 'i love1yOU' print(msg.title()) # result: I Love1You
-
center 函数:居中
print(s1.center(20,'*')) # 设置*为填充字符,总长度20 print(s1.center(20)) # 未设置填充字符,总长度20 # result: # *******RaiGor******* # RaiGor
-
find 函数:通过元素寻找索引,找到第一个就返回字符位置,找不到返回-1
s1 = 'iseedeadpeople' print(s1.find('i'),s1.find('z'),s1.find('e')) # result: 0 -1 2
-
index 函数:通过字符串寻找索引,返回第一个字符的位置,找不到会报错,可规定开始位置
s1 = 'iseedeadpeople' print(s1.index('see')) # result: 1 print(s1.index('see',2)) # result: ValueError: substring not found
-
-
tuple 操作的补充
-
元组中如果只有一个元素且没有逗号,那么他不是元组,它与括号内的元素数据类型相同
tu1 = (1) tu2 = (1,) tu3 = ([1,2,3]) tu4 = ('string') print(tu1, type(tu1)) # result: 1 <class 'int'> print(tu2, type(tu2)) # result: (1,) <class 'tuple'> print(tu3, type(tu3)) # result: [1, 2, 3] <class 'list'> print(tu4, type(tu4)) # result: string <class 'str'>
-
index 函数:通过元素寻找索引,找到第一个位置返回(未找到会报错)
tu = (1,2,2,2,2,3,4) print(tu.index(5)) # result: ValueError: tuple.index(x): x not in tuple
-
count 函数:获取某元素在列表中出现的次数
tu = (1,2,2,2,2,3,4) print(tu.count(2)) # result: 4
-
-
list 操作的补充
-
count 函数、index 函数:操作同上
-
sort 函数:对源列表进行排序(默认从小到大)
l1 = [5, 4, 3, 7, 8, 6, 1, 9] l1.sort() # 默认从小到大排序 print(l1) # result: [1, 3, 4, 5, 6, 7, 8, 9] l1.sort(reverse = True) # 添加reverse = True实现从大到小排序 print(l1) # result: [9, 8, 7, 6, 5, 4, 3, 1]
-
reverse 函数:对源列表将进行翻转操作
l1 = [5, 4, 3, 7, 8, 6, 1, 9] l1.reverse() print(l1) # result: [9, 1, 6, 8, 7, 3, 4, 5]
-
列表可以进行相加、数乘等操作(3.4 以上版本支持)
l1 = [1, 2, 3] l2 = ['A', 'B'] print(l1 + l2) # result: [1, 2, 3, 'A', 'B'] print(l1 * 2) # result: [1, 2, 3, 1, 2, 3]
-
典型例题:
l1 = [11, 22, 33, 44, 55] # 将索引为奇数的元素删除 # 方法一:笨(可以思维置换直接取偶数加入新列表中) temp_li = [] for i in range(len(l1)): if i % 2 == 1: temp_li.append(l1[i]) for i in temp_li: if i in l1: l1.remove(i) print(l1) # 方法二:最简单 del l1[1::2] print(l1) # 方法三:倒序删除 for i in range(len(l1) - 1, -1, -1): if i % 2 == 1: l1.pop(i) print(l1)
-
-
dict 操作的补充
-
popitem 函数:3.5 版本之前是随机删除,3.6 版本以后是删除最后一个元素,有返回值(基本用不到)
-
update 函数:可以修改、增加键值对
dic = {'name': 'Raigor', 'age': 18} dic.update(hobby='运动',height='175') # 可以增加新的键值对 dic.update(age=100) # 可以修改原有键值对 dic.update(((1,'a'),('name','0'),('hobby',0))) # 另一种批量更新键值对方式(外面括号tuple和list都可以) print(dic) # result: {'name': '0', 'age': 100, 'hobby': 0, 'height': '175', 1: 'a'} dic1 = {1 : 1} dic2 = {1 : 2} dic1.update(dic2) # update 甚至可以利用另一个字典更新原有字典 print(dic1) # result: {1: 2}
-
fromkeys 函数:将可迭代对象共用一个值
dic = dict.fromkeys('abc', 100) print(dic) # result: {'a': 100, 'b': 100, 'c': 100}
另有一基于fromkeys 的练习题:
dic = dict.fromkeys([1,2,3],[]) dic[1].append(666) # 公用一个值! print(dic) # result: {1: [666], 2: [666], 3: [666]}
-
典型例题:
dic = {'k1': '太白', 'k2': 'barry', 'k3': '拜拜', 'age': 18} # 将字典中键含有'k'元素的键值对删除 # 方法一: temp_dic = {} for key in dic.keys(): if not 'k' in key: temp_dic.setdefault(key, dic[key]) dic = temp_dic # print(dic) # 方法二:(有疑问!!!!) # 字典不可迭代过程中改变长度 dic_keys = list(dic.keys()) for key in dic_keys: if 'k' in key: dic.pop(key) print(dic)
-
三、数据类型的转换
-
bool 的转换
-
下列值都可以转换为bool 数据类型的False:
'', 0, (), {}, [], set(), None
-
其余的值转化为bool 数据类型都为True
-
-
基础数据类型的存储空间占用(从低到高)
# int(float) # str # set:无序,即无序存索引相关信息 # tuple:有序,需要存储索引相关信息,不可变 # list:有序,需要存储索引相关信息,可变,需要处理数据的增删改 # dict:有序,需要存储key和value映射的相关信息,可变,需要处理数据的增删改(3.6 之后有序)
四、编码的进阶
-
数据在内存中全部是以Unicode编码的,但是当你的数据用于网络传输或者存储到硬盘中,必须是以非Unicode编码(UTF-8, GBK 等等),故在读取、存储等操作中,都存在编码之间的相互转换,故在计算机中存在唯一非Unicode 编码的特殊数据类型bytes,用来充当存储、读取操作与内存数据之间的媒介:
content = 'hello' # bytes:特殊的非Unicode数据类型,它的基本用法与str基本一致 b = b'hello' print(b,type(b)) # result: b'hello' <class 'bytes'> print(b.upper(),type(b.upper())) # result: b'HELLO' <class ' bytes'> s1 = '中国' b = s1.encode('utf-8') # 编码 str -> bytes s = b.decode('utf-8') # 解码 bytes -> str print(b,s) # result: b'xe4xb8xadxe5x9bxbd' 中国
-
不同非 Unicode 之间编码方式的转化:以 gbk 转为 utf-8 为例
# gbk -> utf-8 b1 = b'xd6xd0xb9xfa' s = b1.decode('gbk') u = s.encode('utf-8') print(u) # result: b'xe4xb8xadxe5x9bxbd'