第七章 python基础之数据类型补充(基础五)
7.1 数据类型补充
字符串str,整型int,列表list,元组tuple,字典dict。
7.1.1 字符串str类型补充
s1 = str(123) #类型字符串
s.capitalize() 首字母大写
s = "alex wusir"
s1 = s.capitalize() #首字母大写:Alex wusir
print(s1)
s.title() 每个单词首字母大写
s = "alex wusir"
s1 = s.title() #每个单词前面首写字母大写:Alex Wusir
print(s1)
s.count() 统计出现的次数
s = "alex awusair"
print(s.count("a")) #3次
s.find() 字符串的查找
s = "alex taibai"
print(s.find("e")) #dind 查找出对应的索引值
print(s.find("c")) # find 查找不到的时候返回 -1
print(s.index("C")) # index 查找不到就报错
查找所有a的索引(下标):
s = "alex taibai"
for i in range(len(s)): #range范围是s字符串的长度
if s[i] == 'a':
print(i)
7.1.2列表list类型补充:
li = list("815678234") # 定义的方式
print(li)
['8', '1', '5', '6', '7', '8', '2', '3', '4']
count() 统计
li = list("815678234")
print(li.count("1")) #统计1出现1次
index() 查看
print(li.index("4")) #查看"4"的索引值为8
print(li)
li.reverse() 反正
li.reverse() #['4', '3', '2', '8', '7', '6', '5', '1', '8']
print(li)
li.sort() 排序
li.sort() # 升序:['1', '2', '3', '4', '5', '6', '7', '8', '8']
li.sort(reverse=True) # 降序:['8', '8', '7', '6', '5', '4', '3', '2', '1']
print(li)
7.1.3元组tuplel类型的补充
tu = tuple("12345")
print(tu)
('1', '2', '3', '4', '5')
count() 统计
tu = ('1', '2', '3', '4', '5')
print(tu.count("3")) #统计"3"出现的次数
index() 查找
print(tu.index("4")) #4对应的索引值为3
3
7.1.4 字典dict类型的补充
dic = dict(k=1,k1=123,k2="aa",k3=222,k4=1123123) # 定义方式
print(dic)
{'k': 1, 'k1': 123, 'k2': 'aa', 'k3': 222, 'k4': 1123123}
dic.popitem() # 随机删除字典中的某个键值对,将删除的键值对以元祖的形式返回
dic = {'k': 1, 'k1': 123, 'k2': 'aa', 'k3': 222, 'k4': 1123123}
dic2 = dic.popitem() #随机删除返回删除内容('k4', 1123123)
print(dic)
('k4', 1123123)
{'k': 1, 'k1': 123, 'k2': 'aa', 'k3': 222}
python3.6版本 默认删除最后个键值对
dict.fromkeys() 批量创建字典
dic = {}
dic1 = dict.fromkeys("abcdef",[4,5,6])
# 第一个参数可迭代对象
# 第二个参数是每个键对应的值 -- 用的都是同一个内存地址
print(dic1)
{'a': [4, 5, 6], 'b': [4, 5, 6], 'c': [4, 5, 6], 'd': [4, 5, 6], 'e': [4, 5, 6], 'f': [4, 5, 6]}
dic1["a"].remove(5)
print(dic1)
{'a': [4, 6], 'b': [4, 6], 'c': [4, 6], 'd': [4, 6], 'e': [4, 6], 'f': [4, 6]}
7.1.5 集合set补充类型
s = set("1234") # 定义方式
print(s)
{'2', '1', '3', '4'}
7.2 数据类型的转换
字符串str===>整数int 字符串中必须是十进制的数,才能进行转换。
s = "abc"
n = int(s)
print(n,type(n))#报错 n = int(s) ValueError: invalid literal for int() with base 10: 'abc'
s = "123" #必须是十进制的数
n = int(s)
print(n,type(n))
123 <class 'int'>
整数int===>字符串str
n = 123
s = str(n)
print(s,type(s))
字符串str==>列表list
s = "123"
li = list(s)
print(li)
['1', '2', '3']
s = "123"
print(s.split()) #把字符串转化成列表:['123']
print(''.join(li)) # 把列表转换成字符串:123
列表list==>字符串str
li = ["12","3"]
s = str(li) #把列转成字符串['12', '3'] <class 'str'>
print(s,type(s))
print(s)
print(''.join(li)) #用join把列转换成字符串 不能有数字,变成123
123
列表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
可变: list,dict,set
不可变: str,int,bool,tuple
数据类型的访问方式:
直接访问: int,bool,set
顺序访问: list,tuple,str
通过键访问: dict
7.2 常见的问题
7.2.1 对列表li里面索引值是奇数的删除
li = [1,2,3,4,5] #对应的索引值:0,1,2,3,4
试题:
li = [1,2,3,4,5] #[1,3,4,5]
索引值是奇数的删除
for i in range(4):
if i % 2 == 1:
li.pop(i) # 结果不对
print(li) #结果[1,3,4] for循环执行到最后一个索引3时会
对列表里索引值是奇数的删除方法:
1.1倒序删除
li = [1,2,3,4,5]
for i in range(len(li)-1,-1,-1):
if i % 2 == 1:
li.pop(i) # 倒序删除
print(li)
1.2 偷换概念删除
偷换感念
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中添加一对键值:"k3":v3
dic = {"k1":"v1","k2":"v2","k3":"v3"}
for i in dic:
dic["k7"] = "1"
print(dic) #报错:RuntimeError: dictionary changed size during iteration
通过循环取值添加到新的列表内进行删除。
dic = {"k1":"v1","k2":"v2","k3":"v3"}
li = []
for i in dic:
if i == "k1" or i == "k3":
li.append(i)
for em in li:
dic.pop(em)
print(dic)
7.3编码进阶
ascii 不支持中文
gbk 国标 中文2 英文1
unicode 万国码 英文2 中文4
utf-8 英文1 欧洲2 亚洲3
7.3.1 解码,编码
中文转成字节,先编码,解码后编码
s = "今天晚上,吃鸡!"
s1 = s.encode("gbk") # 中文转换成字节 -- 编码
s1 = s.encode("utf-8") # 中文转换成字节 -- 编码
b'xbdxf1xccxecxcdxedxc9xcf,xb3xd4xbcxa6!'
print(s1.decode("utf-8")) #字节转换成字符串 -- 解码
s = "你好"
s1 = s.encode("utf-8") # 字节
print(s1) # 6个字节
print(s1.decode("gbk")) # 3个字
python3内存使用的就是unicode
python2内存使用的就是ascii