基础数据类型的补充以及编码进阶
-
capitalize() 首字母大写, 其余小写
# str补充 # s1 = "taiBai" # capitalize 首字母大写, 其余小写 # print(s1.capitalize()) # Taibai
-
swapcase() 大小写反转
s1 = "taiBai # swapcase 大小写反转 # print(s1.swapcase()) # TAIbAI
-
title() 每个单词的首字母大写
# title 每个单词的首字母大写 # msg = 'taibai say3hi' # print(msg.title()) # Taibai Say3Hi
-
center() 居中
# center 居中 # s1 = 'barry' # print(s1.center(20, '='))
-
find index
# find :通过元素找索引,找到第一个就返回,找不到 返回-1 # index:通过元素找索引,找到第一个就返回,找不到 报错
2.列表(list) 的补充
-
index() 通过元素找索引
# index l1 = ['太白', '123', '女神', '大壮'] print(l1.index('123')) # 通过元素找索引
-
sort() 排序
# sort l1 = [5, 4, 3, 7, 8, 6, 1, 9] l1.sort() # 默认从小到大, 升序 l1.sort(reverse=True) # 从大到小排序 l1.reverse() # 反转 print(l1)
-
列表也可以相加也可以和数字相加
# 列表也可以相加 l1 = [1, 2, 3] l2 = [1, 2, 3, '太白', '123', '女神'] print(l1 + l2) # [1, 2, 3, 1, 2, 3, '太白', '123', '女神'] # 列表与数字相乘 l1 = [1, 'daf', 3] l2 = l1 * 3 print(l2)
-
列表元素的删除
# 列表的删除 循环一个列表时, 最好不要改变列表的大小, 这样会影响你的最终结果 l1 = [11, 22, 33, 44, 55] # 索引为奇数的元素删除 # 第一种最简单的方法 del l1[1::2] print(l1) # 第二种倒序删除元素 for index in range(len(l1)-1, -1, -1): # 必须要加反向步长-1 if index % 2 == 1: l1.pop(index) print(l1) # 第三种方法 思维置换 l2 = [11, 22, 33, 44, 55] l3 = [] for index in range(len(l2)): if index % 2 == 0: l3.append(l2[index]) l2 = l3 print(l2)
3.元组的补充
-
元组的补充
# tuple 元组中如果只有一个元素, 并且没有逗号, 那么它就不是元组, 它与改元素的数据类型一致 tu1 = (2) print(type(tu1)) # int类型 tu1 = ('太白') print(type(tu1)) # str类型 tu1 = (1, ) # 有逗号的就是元组 print(type(tu1)) # count 计数 tu = (1, 2, 3, 3, 3, 2, 2, 3,) print(tu.count(2)) # index tu = ('太白', '日天', '太白') print(tu.index('太白')) # 如果有重复的元素, 默认是第一个元素
4.字典的补充
-
update (添加值, 改值, 更新)
# update 很重要 dic = {'name': '太白', 'age': 18} dic.update(hobby='上学', hight='175') # 添加值,通过关键字的形式添加 dic.update(name='付举鹏') # 可以改值 dic.update([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]) # 内部采用元组的拆包 print(dic) # 结果为{'name': '太白', 'age': 18, 1: 'a', 2: 'b', 3: 'c', 4: 'd'} dic1 = {"name": "jin", "age": 18, "sex": "male"} dic2 = {"name": "alex", "weight": 75} dic1.update(dic2) # 更新,有则覆盖,无责添加 print(dic1) # {'name': 'alex', 'age': 18, 'sex': 'male', 'weight': 75} print(dic2)
-
formkeys
# formkeys dic = dict.fromkeys([1, 2, 'fu'], 100) # 键指向的都是同一个值 print(dic) dic = dict.fromkeys([1, 2, 3], []) dic[1].append(88) print(dic) # {1: [88], 2: [88], 3: [88]} # 结果都会变, 因为指向的同一个,改一个,都会变的
-
字典的删除(不能改变字典的大小)
dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18} # 将字典中键含有'k'元素的键值对删除。 for i in list(dic): # 如果直接循环字典的key的话, 会报错,因为改变字典的大小了, 所以转换成list就可以了 if 'k' in i: dic.pop(i) print(dic)
-
非空即True
# 0,''(),[],{},set(),None 这些都是False # 非空及True
5.编码的进阶
-
编码的介绍(编码就是密码本,就是二进制和文字之间的对应关系)
-
ASCII码:包含英文字母,数字,特殊字符与01010101对应关系。
a 01000001 一个字符一个字节表示。
-
GBK:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系。
a 01000001 ascii码中的字符:一个字符一个字节表示。
中 01001001 01000010 中文:一个字符两个字节表示。
-
Unicode:包含全世界所有的文字与二进制0101001的对应关系。
a 01000001 01000010 01000011 00000001
b 01000001 01000010 01100011 00000001
中 01001001 01000010 01100011 00000001
-
UTF-8:包含全世界所有的文字与二进制0101001的对应关系(最少用8位一个字节表示一个字符)。
a 01000001 ascii码中的字符:一个字符一个字节表示。
To 01000001 01000010 (欧洲文字:葡萄牙,西班牙等)一个字符两个字节表示。
中 01001001 01000010 01100011 亚洲文字;一个字符三个字节表示。
-
-
不同的密码本之间是不能互相识别的
-
数据在内存中全部是以Unicode编码的, 但当数据进行网络传输和保存到硬盘中,必须是以非Unicode编码 (utf-8, gbk 等等)
-
bytes(主要用来网络传输, 也是一种数据类型)
-
英文
-
字符串: 'hello'
-
内存中的编码方式; Unicode
-
表现形式: 'hello'
-
-
bytes
-
内存中的编码方式: 非Unicode
-
表现形式: b'hello'
-
-
-
中文
-
字符串: '中国'
-
内存中的编码方式: Unicode
-
表现形式: '中国'
-
-
bytes:
-
内存中的编码方式: 非Unicode # utf-8
-
表现形式: b'\xe4\xb8\xad\xe5\x9b\xbd' utf-8中,一个中文字符占3个字节
-
-
-
-
str --> bytes(相互转换)
# str --> bytes s1 = '中国' b1 = s1.encode('utf-8') # 编码 print(b1) # b'\xe4\xb8\xad\xe5\x9b\xbd' 字节类型 b1 = s1.encode('gbk') print(b1) # b'\xd6\xd0\xb9\xfa' # 解码 # bytes --> str b2 = b1.decode('gbk') print(b2)
-
gbk --> utf-8
# gbk -->utf-8 b1 = b'\xd6\xd0\xb9\xfa' s = b1.decode('gbk') print(s) b2 = s.encode('utf-8') print(b2)