Python基础入门教程Python数据
Python基础入门教程之Python数据类型对于Python数据类型今天我们做一个详细的了解。
Python基本数据类型一般分为:数字、字符串、列表、元组、字典、集合这六种基本数据类型。
一、数值(Numbers)numbers:列出了一些简单的例子
,-,0, #整型--int()3.61,3.1e-6,0.0 #浮点型--float()3+6j,3.0+6.0j,6j #复数-- strvar=""
# 特征:可以获取,但不可以修改,有序排列
# 获取字符串中的数据:跟列表list元组tuple的取值一模一样(正向下标,反向下标)
# 修改字符串当中的值,不可修改,会进行报错
再来看看字符串的一些常见操作
"""字符串""" #多行字符串,一般用于文件说明和函数说明,可使用__doc__输出s=优雅的Python#切片s[0],s[-1],s[3:],s[::-1] #优,n,Python,nohtyP的雅优#替换,还可以使用正则表达式替换s.replace(Python,Java) #优雅的Java#查找,find()、index()、rfind()、rindex()s.find(P) #3,返回第一次出现的子串的下标s.find(h,) #6,设定下标开始查找s.find() #-1,查找不到返回-1s.index(y) #,返回第一次出现的子串的下标s.index() #不同与find(),查找不到会抛出异常#转大小写,upper()、lower()、swapcase()、capitalize()、istitle()、isupper()、islower()s.upper() #优雅的PYTHONs.swapcase() #优雅的pYTHON,大小写互换s.istitle() #Trues.islower() #False#去空格,strip()、lstrip()、rstrip()#格式化s1=%s%s%(Windrivder,1) #Windrivder1s={},{}.format(1,Windridver) #推荐使用format格式化字符串s3={0},{1},{0}.format(Windrivder,1)s={name}:{age}.format(age=1,name=Windrivder)#连接与分割,使用+连接字符串,每次操作会重新计算、开辟、释放内存,效率很低,所以推荐使用joinl=[,03,9,:00]s5=-.join(l) #-03-9-:00s6=s5.split(-) #[,03,9,:00]#还有一些常用的,这里只列出来S.endswith() #字符串是否以给定字符串结尾S.startswith() #字符串是否以给定字符串开始S.isalnum() #是否全是字母和数字S.isalpha() #是否全是字母S.isspace() #是否全是空白字符S.center(width,[fillchar]) #中间对齐S.ljust(width,[fillchar]) #左对齐,默认是空格补全S.rjust(width,[fillchar]) #右对齐S.count(substr,[start,[end]])#计算substr在S中出现的次数S.splitlines([keepends]) #按行分割成list,keepends是一个bool值,如果为真每行后而会保留行分割符。
以上是一些常见的操作,当然还有一个没有列出来,这里想单独拿来谈谈,就是Python3字符串的编码:
ASCII编码出现最早,只有大小写英文字母、数字和一些符号等17个字符,为了实现多语言表示,如中文的GB31编码,日文的Shift_JIS编码等,Unicode孕育而生,它将所有语言都统一到一套编码中;
在Python3中所有字符串在内存中均是Unicode保存;
当需要将文件保存到外设或进行网络传输时,就要进行编码转换,将字符转换为字节,以提高效率
#encode将字符转换为字节str=优雅的Pythonstr.encode() #默认编码是UTF-8b\xe\xbc\x98\xe9\x9b\x85\xe7\x9a\x8Pythonstr.encode(gbk)b\xd3\xc5\xd1\xc5\xb5\xcPython#decode将字节转换为字符b\xe\xbc\x98\xe9\x9b\x85\xe7\x9a\x8Python.decode()优雅的Pythonb\xd3\xc5\xd1\xc5\xb5\xcPython.decode(gbk)优雅的Python
在Python3中,内存中的Unicode字符用str对象表示,对应于的,Python3使用了一种全新的数据类型来表示字节,就是bytes。
所以encode转换后的字节流就不是str对象,而是bytes字节对象,它当然支持分片、索引、基本数值运算等操作,但str与bytes类型的数据不能进行+操作。
来看看bytes数据类型的定义:
byt=b优雅的PythonFile"stdin",line1SyntaxError:bytescanonlycontainASCIIliteralcharacters.byt=bPythontype(byt)classbytes
从上述例子中可以看出bytes对象不能由超出ASCII码范围的字符组成,只接受ASCII码这个范围的字符。
uaa\ua中.encode(unicode-escape)b\\uedb
AabAab\x0\x1\x61bAa#-*-coding:utf-8-*-...同样,从上面的例子我们还可以总结出一些东西:
Unicode码在Python3中有两种表示方式,u字符串和\u四位十六进制数;区分r字符串,是表示不转义的原始字符串
将字符直接以Unicode码保存使用unicode-escape
在Python的交互式环境中,输出bytes对象时,可按ASCII码表示,或按十六进制\x表示
在Python头声明#-*-coding:utf-8-*-,是告诉Python编译器按utf-8的方式读取,这个声明并不能将Python文件本身保存成utf-8,这时候需要借助文本编辑器保存文件编码。
二、列表(List)Python可使用语法糖[]表示列表,其中的元素可以是任何类型,以顺序存储的方式动态储存数据:
#定义L=[] #推荐方式L=list()L=[Windrivder,1,{name:xiaoming}]#多重赋值技巧name,age,other=L#列表切片参考str#常用方法L.append(a) #[Windrivder,1,{name:xiaoming},a]L.pop() #[Windrivder,1,{name:xiaoming}],还可以指定下标删除元素L.extend(L1) #合并列表L1L.insert(1,a) #在下标为1的位置插入aL.index(a) #同字符串的index()L.remove(a) #删除操作L.count(a) #求某个值的个数L.reverse() #反转L=[,,-1,9,-5,6]L.sort() #sort()排序,使用非常灵活L.sort(reverse=True) #反序L.sort(key=abs) #传入函数关键字作为排序规则forl1,linzip([windrivder,1],[jack,]): #zip同时遍历两个列表print({}--{}.format(l1,l))forindex,valueinenumerate(L): #enumerate带索引遍历列表print({}--{}.format(index,value))#列表生成式L=[[1,,3],[,5,6],[7,8,9]]r=[sum(L)forlinL] #[6,15,]L=[aforainrange(0,10)ifa%==0] #[0,,,6,8]
三、tuple元组型
特征:可以获取但不能修改数据,排列有序
# tuplevar=()这是一个空元祖 # tuplevar=(1)这是一个整型 # tuplevar=(1,)这是一个元祖 #综上所述:判断tuplevar=(?)或tuplevar=(?,)这两种是不是元组, 取决于里面值是否有逗号,有就是元组没有就是别的数据类型 空元祖可以使用()来表示
# 获取元组中的数据:跟列表list的取值一模一样(正向下标,反向下标)
# 修改元组中的值,不可以修改,会进行报错
#定义t=()t=tuple()t=(1,)#定义一个元素时,需要与(1)--int区分开t=(Windrivder,1,{name:xiaoming})#没有列出更多的方法,可以使用tuple.__dir__()查看t.index(1) #1
四、dict字典
dictvar={}
# 冒号左边是键,右边是值,键值对之间用逗号隔开
# 特征:可以获取,可以修改,无序排列(python3.6版本看似有序、实则无序 # 底层,使用了哈希算法,储存的数据是散列)(3.5版本无序),键值对储存的数据
# 获取字典当中的数据:可以获取,直接输入冒号左边的键即可取值的数据
# 修改字典当中的数据:可以修改,直接将要改的值替换掉键就可实现修改
#一般在命名字典的键时,推荐使用字符串,按照变量命名的字符串.
#定义d={}d={windrivder:1,other:{jack:}}#嵌套字典d=dict(name=windrivder,age=1)d=dict([(name,windrivder),(age,1)])#{name:windrivder,age:1}d=dict(zip([name,age],[windrivder,1]))#常用方法d.keys(),d.values(),d.items() #分别遍历键、值、键值对d.setdefault(key[,value]) #为字典的某一项设置默认值d.get(key,default) #获取字典中的某个值d.update(newd) #合并字典,此方式效率较高d.pop(key,[d])#删除字典中键值为key的项,返回键值为key的值,如果不存在,返回默认值d,否则抛出异常d.popitem() #随机删除某一项键值对,还可以使用关键字deld={k:vfor(k,v)inzip([name,age],[windrivder,1])}
五、set集合型
setvar={} 数据类型显示是一个dict字典 setvar=set() 强制转换成一个空集合的数据类型(只有这一种类型)
# 特征:不可获取,也不可以修改,无序排列,自动去掉重复数据
# 获取集合当中的数据:不能获取,会进行报错
# 修改集合当中的数据:不可修改,会进行报错
a=set()b=set([1,,3])#平时使用到的时候不多,所以没有列出a.add(frozenset(b))六、自动类型转换( 针对于Number数据类型来说的 )
# 规律:精度从低到高bool-int-float- # 当两个不同的数据类型运算时,默认向更高精度转化
# True转化成整型是1False转化成整型是0
# int+float类型较特殊,最终值会保留小数点后15~18位,因为float在本质上存在精度损耗,
因为小数的二进制在内存中是无限循环没有终止,一般截取15~18位
classCustomDict(dict):Simpledictbutsupportaccessasx.ystyle.def__init__(self,names=(),values=(),**kw):super(CustomDict,self).__init__(**kw)fork,vinzip(names,values):self[k]=vdef__getattr__(self,key):try:returnself[key]exceptKeyError:raiseAttributeError(r"CustomDictobjecthasnoattribute%s"%key)def__setattr__(self,key,value):
self[key]=value
以上即为对于Python数据的六大类型的相关介绍,大家认真阅读操作一下!
正在学习Python方向的同学,为大家推荐千锋原创教材Python系列丛书:
如果没有Python基础的同学,可以先查看我们的Python基础入门教材进行基础入门,如果你有一定的Python基础,那么建议你根据Python发展方向来选择进阶书籍。
如果在学习Python过程中遇到其他问题,欢迎下方留言咨询,千问千知老师将第一时间为大家解答。
相关信息推荐:
Python基础入门教程:Python编程原理
01-05-8
Python基础入门教程:初学者常见的问题
01-05-8
Python基础入门教程:Python与Python3版本的区别
01-05-8
Python基础入门教程:编程小白学Python满足以下条件即可
01-05-8
程序员必备知识:计算机编程语言的三大分类
01-05-6
预览时标签不可点收录于话题#个上一篇下一篇转载请注明:http://www.sonphie.com/jbby/14555.html