s = 'Hello Hi 3nihhao'
print(s.capitalize()) # 只有首字母大写Hello hi 3nihhao
print(s.swapcase()) # 大小写反转hELLO hI 3NIHHAO
print(s.title()) # Hello Hi 3Nihhao # 数字后也会大写
print(s.center(20, "*")) # **Hello Hi 3nihhao** 不加填充物 默认是空格
print(s.find('l')) # 2 找到第一个就返回,找不到 就返回-1
# print(s.index('Q')) # index 找不到报错
# 数组
l1 = ['太白', '123', '女神', '大壮']
print(l1.index('太白')) # 返回第一个出现的位置
# sort
l1 = [5, 4, 3, 7, 8, 6, 1, 9]
l1.sort() # 不会形成新列表, 是对原列表排序, 默认从小到大
print(l1) # [1, 3, 4, 5, 6, 7, 8, 9]
l1.sort(reverse=True) # 排序 [9, 8, 7, 6, 5, 4, 3, 1]
print(l1)
l2 = [5, 4, 3, 7, 8, 6, 1, 9]
l2.reverse()
print(l2) # 列表的反转
# 列表相加 相乘
l1 = [1, 2, 3, 4]
l2 = [4, 5]
print(l1+l2) # 相加
l3 = l1*3 # 列表相乘 重复3次
print(l3)
# 删除奇数位置
l1 = [11, 22, 33, 44, 55]
del l1[1::2] # [11, 33, 55]
print(l1)
# 注意下面的方式是错误的,因为每删除前面一个元素,索引值会变化,后面的索引值会往前面移动一位
# for i in range(len(l1)):
# if i % 2 == 1:
# l.append(l1[i])
# print(l)
# 可以倒序删除,因为删除后面的元素,不会对前面元素的索引值改变,每次多是循环前面的索引
l4 = [11, 22, 33, 44, 55]
for i in range(len(l4)-1, -1, -1): # 索引最大值是长度-1, 第2个-1是顾头不顾尾, 第三个-1是反向步长度
if i % 2 == 1:
l4.pop(i) # 删除之后前面的元素不受影响,后面的元素索引值往前挪动
print(l4)
# 注意:循环一个列表的时,最好不要改变列表的大小,这样会影响你的最终的结果。
# 字典 update
dic = {'name': '太白', 'age': 18}
dic.update(hobby='运动', hight='175', name='张三') # 无返回值 ,直接改原始dic
print(dic) # {'name': '张三', 'age': 18, 'hobby': '运动', 'hight': '175'} 无则添加 有责改变
dic.update(((1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')))
print(dic) # {'name': '张三', 'age': 18, 'hobby': '运动', 'hight': '175', 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) # {'name': 'alex', 'weight': 75}
# fromkeys
dic = dict.fromkeys('abc', 100)
print(dic) # {'a': 100, 'b': 100, 'c': 100} 迭代着增加
dic = dict.fromkeys([1, 2, 3], 'alex')
print(dic) # {1: 'alex', 2: 'alex', 3: 'alex'}
# 注意这个坑, 如果一个改变了一个元素的值,其他元素的值也会改变
dic = dict.fromkeys([1, 2, 3], []) # {1: [666], 2: [666], 3: [666]}
dic[1].append(666)
print(dic)
# 将字典中键含有'k'元素的键值对删除。
dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
# 这种方式是错误的,循环时字典大小不能 RuntimeError: dictionary changed size during iteration
# for key in dic:
# if 'k' in key:
# dic.pop(key)
# print(dic)
# 可以将要删除的值 转化为list 寻魂
l = []
for key in dic:
if 'k' in key:
l.append(key)
print(l) # ['k1', 'k2', 'k3']
for i in l:
dic.pop(i)
print(dic) # {'age': 18}
# 方式2
dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
for i in list(dic.keys()):
if 'k' in i:
dic.pop(i)
print( dic) # {'age': 18}
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为非Unicode编码比如:UTF-8编码。
# #str ----> bytes str数据想要存储到文件或者传输出去,那么直接是不可以的,
# 要将str数据转化成bytes数据就可以了。
s1 = '中国'
b = s1.encode('utf-8')
print(b) # b'\xe4\xb8\xad\xe5\x9b\xbd'
s2 = s1.encode('gbk')
print(s2) # b'\xd6\xd0\xb9\xfa'
# bytes ---> str
b1 = b'\xe4\xb8\xad\xe5\x9b\xbd' # 以utf-8编码,也要用utf-8解码
s1 = b1.decode('utf-8')
print(s1)
# 那么gbk编码的bytes如何转化成utf-8编码的bytes呢?
# 不同编码之间,不能直接互相识别,借助Unicode进行转换
b1 = b'\xe4\xb8\xad\xe5\x9b\xbd' # 这是utf-8编码bytes类型的中国
# b2 = b'\xd6\xd0\xb9\xfa' # 这是gbk编码bytes类型的中国
s = b1.decode('utf-8') # utf-8先转为unicode
b3 = s.encode('gbk') # unicode 转为gbk
print(b3)