编码数组字典

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)

posted on 2020-04-22 22:55  黑桃Q  阅读(161)  评论(0编辑  收藏  举报

导航