python基础之数据类型补充(基础五),,第七章 python


第七章 python基础之数据类型补充(基础五)

7.1 数据类型补充

字符串str,整型int,列表list,元组tuple,字典dict。

7.1.1 字符串str类型补充

s1 = str(123)                   #类型字符串

s.capitalize() 首字母大写

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

s.title() 每个单词首字母大写

s = "alex wusir"s1 = s.title()          #每个单词前面首写字母大写:Alex Wusirprint(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 查找不到的时候返回 -1print(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"的索引值为8print(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对应的索引值为33

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 = 123s = 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把列转换成字符串 不能有数字,变成123123

列表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'\xbd\xf1\xcc\xec\xcd\xed\xc9\xcf,\xb3\xd4\xbc\xa6!'print(s1.decode("utf-8"))  #字节转换成字符串 -- 解码
s = "你好"s1 = s.encode("utf-8")  # 字节print(s1)  # 6个字节print(s1.decode("gbk"))  # 3个字

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

python基础之数据类型补充(基础五)

评论关闭