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 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'\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

posted @ 2019-06-17 20:07  wushe  阅读(188)  评论(0编辑  收藏  举报