数据类型补充和进阶编码

数据类型补充

s1 = str(123)

#首字母大写
s = "alex wusir"
s1 = s.capitalize()
print(s1)

# 每个单词首字母大写
s = "alex wusir"
s1 = s.title()
print(s1)

# 统计出现的次数
s = "alex awusair"
print(s.count("a"))

# 大小写转换
s = "alex"
print(s.swapcase())

# 查找
s = "alex taibai"
print(s.find("c"))     # find 查找不到的时候返回 -1
print(s.index("C"))    # index 查找不到就报错

# 找到所有a的下标
for i in range(len(s)):
    if s[i] == 'a':
        print(i)
      
list:
li = list("815678234")   # 定义的方式
print(li)

#统计
print(li.count("1"))

#查看
print(li.index("1"))

#反转
li.reverse()
print(li)

#排序
li.sort()  # 升序
li.sort(reverse=True)  # 降序
print(li)


# tuple:
tu = tuple("12345")
# 统计
print(tu.count("3"))
# 查找
print(tu.index("1"))

# dict:
dic = dict(k=1,k1=123,k2="aa",k3=222,k4=1123123)   # 定义方式
print dic
dic.popitem()   #随机删除
print(dic)

# 随机删除
dic.popitem()
#python3.6版本 默认删除最后个键值对
#python3.5版本以前 随机删除

# 批量创建字典
dic = {}
dic1 = dict.fromkeys("abcdef",[4,5,6])
# 第一个参数可迭代对象
# 第二个参数是每个键对应的值 -- 用的都是同一个内存地址
dic1["a"].remove(5) #都会删除掉
print(dic1)

# set:
s = set("1234")   # 定义方式
print(s)

# 数据类型转换:
# str - int # 字符串中必须都是十进制的数,才能进行转换
s = "abc"
n = int(s)
print(n,type(n))

# int - str
n = 123
s = str(n)
print(s,type(s))

# str - list
s = "123"
li = list(s)
print(li)

list - str
li = ["12","3"]
s = str(li)
print(s,type(s))
print(''.join(li))  #join 不能有数字


# 面试题:
# 把字符串转化成列表
print(s.split())
# 把列表转换成字符串
print(''.join(li))

# list - tuple
li = [1,2,3]
tu = tuple(li)
print(tu)

# tuple - list
tu = (1,2,3)
li = list(tu)
print(li)

# set - list
s = {12,3,4}
print(list(s))

# list - set
li = [1,2,3]
s = set(li)
print(s)



# 总结:
#     字符串 -- 数字:字符串中必须都是十进制的数字
#     数字 -- 字符串:直接转换
#     列表 -- 字符串:''.join() -- 可迭代的对象中不能出现数字
#     字符串 -- 列表:split
#     除字典外,容器数据类型之间可以直接相互转换

# 总结:
#     str,int,bool,list,tuple,dict,set

    # 有序:
    #     str,int,bool,list,tuple
    # 无序:
    #     dict,set
    # 可变:
    #     list,dict,set
    # 不可变:
    #     str,int,bool,tuple

    # 访问方式:
    #     直接访问:int,bool,set
    #     顺序访问:list,tuple,str
    #     通过键访问: dict

一些易混淆点

li = [1,2,3,4]  # [1,3,4]
# # 索引值是奇数的删除
for i in range(4):
    if i % 2 == 1:
        li.pop(i)   # 会报错
print(li)

# 面试题:
li = [1,2,3,4,5]   #[1,3,4,5]
# # 索引值是奇数的删除
for i in range(4):
    if i % 2 == 1:
        li.pop(i)   # 结果不对
print(li)

#因为列表正向会自动补位,所以刚好错过

li = [1,2,3,4,5]
for i in range(len(li)-1,-1,-1):
    if i % 2 == 1:
        li.pop(i)   # 倒序删除
print(li)

# 偷换感念
li = [1,2,3,4,5]
new_li = []
for i in range(len(li)):
    if i % 2 == 1:
        new_li.append(li[i])
for em in new_li:
    li.remove(em)
print(li)

li = [1,2,3,4,5]
for i in range(len(li)-1,-1,-1):
    if i % 2 == 1:
        del li[i]   # 倒序删除
print(li)

li = [1,2,3,4,5]
del li[1::2]
print(li)

# 使用for删除列表的时候从左向右删除,会报错.结果不对


dic = {"k1":"v1","k2":"v2"}
for i in dic:
    dic["k3"] = "v3"
print(dic)

# 面试题:
li = [1,2,3,4]
for i in li:
    li.append(i)
print(li)  #会一直重复添加,因为循环一个一直在变化的列表,是没有尽头的

# 不能在遍历字典本身中改变大小,要批量删除字典的键值对

dic = {"k1":"v1","k2":"v2","k3":"v3"}
for i in dic:
    dic["k7"] = "1"
print(dic)

li = []
for i in dic:
    if i == "k1" or i == "k3":
        li.append(i)
for em in li:
    dic.pop(em)
print(dic)


编码进阶

# 回顾:
# ascii     不支持中文
# gbk       国标   中文2 英文1
# unicode   万国码 英文2 中文4
# utf-8     英文1  欧洲2 亚洲3

# 硬盘中存储的是     字节
# 今天晚上去洗脚  gbk 010101010101 传输字节  010101010101  gbk 今天晚上去洗脚

# s = "abc"
# print(s.encode("gbk"))
# b'xc6xe6xc6xe6'  -- 字节
# b'abc'
# s = "aaaa"
# s1 = b"aaaa"

# s = "今天晚上,吃鸡!"
# s1 = s.encode("gbk")  # 中文转换成字节  -- 编码
# s1 = s.encode("utf-8")  # 中文转换成字节  -- 编码
# b'xbdxf1xccxecxcdxedxc9xcf,xb3xd4xbcxa6!'
# print(s1.decode("utf-8"))  #字节转换成字符串 -- 解码


# python3内存使用的就是unicode
# python2内存使用的就是ascii

# s = "你好"
# s1 = s.encode("utf-8")  # 字节
# print(s1)  # 6个字节
# print(s1.decode("gbk"))  # 3个字

结论:用什么编码就用什么解码

原文地址:https://www.cnblogs.com/li-dong-yu-95-11-21/p/11010409.html