首页 > 其他 > 详细

数据类型补充、"雷区"、编码

时间:2020-01-11 16:00:44      阅读:106      评论:0      收藏:0      [点我收藏+]

 

1.数据类型补充

str:
#字符串数据类型补充
?
s1=str(123)    #常用于类型转换
print(s1)
?
?
#capitalize()首字母大写
s=‘abc‘
s1=s.capitalize()
print(s1)
   
#title() 每个单词首字母大写, 需要被隔开
s2=s.title()
print(s2)
?
?
#count() 统计某个字符串出现的次数
s3=s.count(‘s‘)
print(s3)
?
?
#大小写转换
s4=s.swapcase()
print(s4)
?
?
#查找
s=‘alex taibai‘
s1=s.find(‘a‘)  # 从左往右找, 只找到第一个. 查找不到的时候返回 -1
s2=s.index(‘a‘)  # 查找不到用 ,报错
print(s1,s2)
?
?
#center () 字符居中,长度20其他位置以*为填充
s1=s.center(20,‘*‘)
print(s1)
list:
#列表数据类型补充
li=list(‘123231122114‘) # 生成列表 ,常用语类型转换
print(li)
?
?
#统计
print(li.count(‘1‘))
?
   
#反转
li.reverse() # 对列表容器操作
print(li) # 打印列表容器
?
?
#排序
li.sort() #升序
print(li)
li.sort(reverse=True) #降序
print(li)
?
tuple:
# tu=tuple(‘1234123‘) # 定义元组 , 常用于数据转换
?
#统计
a=tu.count(‘1‘)
print(a)
?
?
#查找
print(tu.index(‘1‘))

 

dict:
#dict
dic=dict(k=1,k1=2,k2=3) # 一种定义方式
print(dic)
?
#随机删除
dic1={‘k1‘:‘1‘,‘k2‘:‘2‘,‘k3‘:‘41‘}
dic1.popitem() #在python3.6版本 ,默认删除最后一个键值对
print(dic1)
?
#批量创建字典,fromkeys第一个参数是可迭代对象, 第二个参数是value
#fromkeys 是一个类方法,dict直接调用,生成一个新的字典
dic2=dict.fromkeys(‘123‘,[1])
dic2[‘1‘][0]=2 # 此处有深浅拷贝的知识
print(dic2)
set:
#集合
s=set(‘1234‘)  # 常用语类型转换
print(s)
数据类型转换:
#数据类型转换
?
###str ---> int
s=‘123‘
a=int(s)#必须是数字
?
###str--->list
li=list(s)
print(li)
?
s=‘abc‘
print(s.split())
?
###list-->str
li=[‘123‘]
s="".join(li)   # join 不能有数字
print(s)
?
###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={1,2,3,4}
print(list(s))
?
###list-->set
li=[1,2,3]
s=set(li)
print(s)

###数据类型转换总结

  1. str -->数字 必须是数字

  2. 数字 --->字符串 ,没要求

  3. 列表转成字符串 ,join-->可迭代的对象中不能出现数字

  4. 字符串转成列表 split

  5. 除字典外 ,容器都数据类型可互相转换

#访问方式:

直接访问: int ,bool,set

顺序访问: list ,tuple,str

通过key dict

 

2.以后会遇见的坑

删除列表的时候

原因:在循环删除列表的元素,或者下标元素时. 列表内的索引会重新排列,方向从左向右.会导致删除不完全,或者是删的数据错误.

#提供两种方式删除
#方式一 倒着删除 , 从列表最后一个元素开始删除.
#索引值是奇数的删除
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_line=[]  # 新列表
for i in li:
   if i%2==0:
     print(i)
     new_line.append(i)
for j in new_line:
   li.remove(j)
print(li)
?

 

字典for的时候怎么删除键值对

原因:字典在循环遍历的时候不允许添加和删除,只能修改

#字典遍历中去删除
dic={‘a‘:‘a‘,‘b‘:‘b‘,‘c‘:‘c‘}
for el in dic:
   dic.pop(el)  # 删除
   dic[‘v‘]=‘v‘ # 添加
   print(el)
   
#?? 都会报错: RuntimeError: dictionary changed size during iteration
?
?
?
#推荐删除方式
dic={‘a‘:‘a‘,‘b‘:‘b‘,‘c‘:‘c‘}
new_line=[]
for el in dic:
   if el==‘a‘:
       new_line.append(el)
for el2 in new_line:
   dic.pop(el2)
print(dic)

 

 

3.编码的进阶

编码 (encode) 解码(decode) 转换成byte字节格式

python3内存中使用的是Unicode编码

python2内存使用的ASCII

#gbk编码  gbk解码  #中文2个字节
s=‘今天是个好日子‘
s1=s.encode(‘gbk‘)
print(s1)
s2=s1.decode(‘gbk‘)
print(s2)

#结果??
b‘\xbd\xf1\xcc\xec\xca\xc7\xb8\xf6\xba\xc3\xc8\xd5\xd7\xd3‘
今天是个好日子


#**************************************#


#utf-8编码, utf-8解码 #中文3个字节
s=‘进入新的世界‘
s1=s.encode(‘utf-8‘)
print(s1)
s2=s1.decode(‘utf-8‘)
print(s2)

#结果??
b‘\xe8\xbf\x9b\xe5\x85\xa5\xe6\x96\xb0\xe7\x9a\x84\xe4\xb8\x96\xe7\x95\x8c‘
进入新的世界

#乱码问题

 用什么编码就用什么解码

原因

gbk编码2个字节,utf-8中文3个字节

###utf-8不能解gbk的编码
s=‘你好‘
s1=s.encode(‘gbk‘)
s2=s1.decode(‘utf-8‘)
print(s2)
#??
UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xc4 in position 0: invalid continuation byte
    
    
###乱码 utf-8是2个字符6个字节 ,  被gbk解成了3个字符6个字节,
s=‘你好‘
s1=s.encode(‘utf-8‘)
s2=s1.decode(‘gbk‘)
print(s2)
#??
浣犲ソ
###图解释:??
 

 

数据类型补充、"雷区"、编码

原文:https://www.cnblogs.com/xiangwang1/p/12179981.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!