Python序列对象与String类型内置方法详解
本文实例讲述了Python序列对象与String类型内置方法。分享给大家供大家参考,具体如下:
前言
在Python数据结构篇中介绍了Python的序列类型数据结构,这次继续深入的学习序列和String类型对象的内建方法。
软件环境
- 系统
- UbuntuKylin14.04
- 软件
- Python2.7.3
- IPython4.0.0
序列类型
序列类型,即由整数进行索引的对象的有序集合。其中又可以分为下面两类:
可变序列:列表,支持元素的插入、删除、替换
不可变序列:元组、字符串
序列的操作方法
序列本质上是由索引对象来指向内存中的数据对象,所以序列数据对象都支持迭代方式,也都能够支持下列几种操作。
索引调用
In[1]:li=[1,2,'name'] In[2]:li[0] Out[2]:1 In[3]:tp=(1,2,'name') In[4]:tp[1] Out[4]:2 In[6]:str='Jmilk' In[7]:str[2] Out[7]:'i'
切片运算符
sequenceName[x:y]⇒切割出由索引X到y-1之间的元素。
注意:索引均由0开始。而且序列的切片操作会返回一个生成一个新的对象,不会让原序列发生改变。
In[12]:li[:3] Out[12]:[1,2,'name'] In[13]:li[1:3] Out[13]:[2,'name'] In[14]:tp[1:3] Out[14]:(2,'name') In[15]:str[1:3] Out[15]:'mi'
扩展切片运算符
sequenceName[x:y:stride]⇒除了切割除x到y-1直接的元素,再对这些元素以stride-1的步进(间隔)进行挑选。
扩展切片运算符能够支持步进。即获取下一个索引之间的间隔。
In[16]:str='MynameisJmilk!' In[21]:str[1:10:2] Out[21]:'ynms'
首先切割除第2到10个元素(空格也算一个),再每隔1个元素挑选一个元素。
序列元素的反转
序列的索引还可以是负数,-1指向序列的最后一个元素,以此类推。Example:
In[30]:str[-1] Out[30]:'!' In[31]:tp[-1] Out[31]:'name'
还有下面两种有趣的玩法:
反转序列
In[27]:str Out[27]:'MynameisJmilk!' In[28]:str[::-1] Out[28]:'!klimJsiemanyM'
倒转删除元素
In[33]:str[:-2] Out[33]:'MynameisJmil'
删除了倒数第1到第2个元素。
连接操作符
连接操作符'+‘,可以将若干个同类型的序列对象连接到一起。
In[1]:str='Mynameis' In[2]:name='Jmilk' In[3]:str+name Out[3]:'MynameisJmilk' In[4]:name=['Jmilk'] In[5]:str+name --------------------------------------------------------------------------- TypeErrorTraceback(mostrecentcalllast)in () ---->1str+name TypeError:cannotconcatenate'str'and'list'objects
如果使用连接操作符处理两个不同类型的序列,会出现类型错误。
重复运算符
重复运算符'*‘,能够让被操作数重复的n次,并生成一个新的同类型序列。
In[16]:star='*' In[17]:star*10 Out[17]:'**********' In[18]:star=['*','*'] In[19]:star*10 Out[19]: ['*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*']
成员关系符
成员运算符in\notin能够判断一个指定对象是否是作为一个容器中的元素,由此来判断两个对象间的关系。在Python运算符一篇中有详细的介绍,传送门:https://www.nhooo.com/article/172479.htm
In[333]:li=[1,2,3] In[334]:1inli Out[334]:True In[335]:1notinli Out[335]:False
序列内置方法
注意:建议在学习一个方法之前,先使用help()函数来查看方法的使用说明文档,其中参数类型可能为iterable迭代器。iterable迭代器分为下面3类:
1.所有的序列类型list、str、tuple。
2.非序列类型dict、file。
3.自定义的任何包含__iter__()或__getitem__()方法的类的对象。
即函数参数中包含iterable,表示可以传递迭代器类型实参。
len()获取序列对象的长度
序列对象的长度,即序列对象元素的个数
In[39]:name='Jmilk' In[40]:len(name) Out[40]:5
zip混合两个序列对象
将两个序列对象索引相同的两个元素结合成元组,以较短的程度为准。
In[54]:str Out[54]:['my','name','is','Jmilk'] In[55]:name Out[55]:'Jmilk' In[56]:zip(name,str) Out[56]:[('J','my'),('m','name'),('i','is'),('l','Jmilk')]
enumerate()枚举出序列对象的元素
enumerate(sequence[,start=0])接收一个序列类型的参数,返回由每一对索引号和元素组成的元组。可以指定索引的起始位置。
In[86]:fori,wordinenumerate(name,2): printi,word ....: 2m 3y 4 5n 6a 7m 8e 9 10i 11s 12 13j 14m 15i 16l 17k
sorted()序列的排序
sorted(iterable,cmp=None,key=None,reverse=False)–>newsortedlist
iterable:待排序的对象
cmp(x,y):指定一个定制的能够比较两个接收到的参数的函数,默认为None,即内建的比较函数。
key(x):指定一个接收一个参数的函数,用作在每个元素中提取一个关键值作为比较值,缺省为None比较每个元素。
reverse:False为默认正序排列,True为逆序排列。
注意:没有__getitem__属性的对象,如:int类型是不能调用key和cmp函数的。
注意:在Python中有许多内建的函数需要指定一个定制的函数,如:map()、filter()、reduce()、包括sorted等,这种时候使用lambda匿名函数将会非常的方便。
排序效率:key、reverse>cmp。因为cmp函数进行多次的两两比较,而key、reverse对每个输入记录只会被调用一次。
Key函数:以第二个关键字为比较值排序
In[205]:li=[('a',3),('b',2),('c',1)] In[208]:sorted(li,key=lambdakeyword:keyword[1]) Out[208]:[('c',1),('b',2),('a',3)]
cmp函数:以第二个关键字为比较值排序
In[213]:sorted(li,cmp=lambdax,y:cmp(x[1],y[1])) Out[213]:[('c',1),('b',2),('a',3)]
reverse:逆序排列
In[216]:sorted(li,lambdaz,x:cmp(z[1],x[1]),reverse=True) Out[216]:[('a',3),('b',2),('c',1)]
reversed()返回一个逆序访问的迭代器
In[84]:forwordinreversed(name): printword, ....: klimjsiemanym
min()取出sequence中的最小值
In[43]:min(str) Out[43]:'' In[44]:min(li) Out[44]:1
若元素是String类型的化会转换为ASCII码计算后再比较。
max()取出sequence中的最大值
类似min()方法。
sum()计算序列中的各项元素和
注意:sum()方法不支持元素为String或Char类型的序列。
In[59]:num=[1,2,3,4] In[60]:str='MynameisJmilk' In[61]:sum(num) Out[61]:10 In[62]:sum(str) --------------------------------------------------------------------------- TypeErrorTraceback(mostrecentcalllast)in () ---->1sum(str) TypeError:unsupportedoperandtype(s)for+:'int'and'str'
会触发类型错误,不支持的运算数类型
all()检测sequence中各项元素是否均为True
全True则Truw
In[63]:num=[1,2,3,''] In[64]:all(num) Out[64]:False In[65]:num=[1,2,3,True] In[66]:all(num) Out[66]:True
注意:所以的空值序列对象都是False
any()检测sequence中的任意项是否为True
有True则True
In[67]:num=[1,2,3,''] In[68]:any(num) Out[68]:True
字符串String
让Str支持Unicode
In[64]:name=u"MynameisJMilk" In[65]:name Out[65]:u'MynameisJMilk'
下面介绍适用于字符串的内建方法。
capitalize()将字符串首字母变成大写
In[88]:str='mynameisjmilk' In[89]:str.capitalize() Out[89]:'Mynameisjmilk'
lower()、upper()将字符串都使用小写、大写
In[90]:str.lower() Out[90]:'mynameisjmilk' In[91]:str.upper() Out[91]:'MYNAMEISJMILK'
title()将字符串中单词的首字母变成大写,其余小写
In[92]:str.title() Out[92]:'MyNameIsJmilk'
index()找到substring对应的元组的索引号
S.index(sub[,start[,end]])->int在start-end的范围内找到substring对应的索引号,再返回一个int类型对象。
In[92]:str.title() Out[92]:'MyNameIsJmilk' In[93]:str.title().index('J',2,13) Out[93]:11
当在指定范围内没有查询到substring时,会触发ValueError:substringnotfound的错误。同时可以看出,String类型对象调用了其内建方法后仍是String类型。
join()将String插入到序列的元素之间
S.join(iterable)->string传递一个序列参数,会将String对象插入到序列的元素之间。即将序列的元素以String为分隔符连接起来,string对象可以为空。
In[103]:li=['a','b','c'] In[104]:str Out[104]:'mynameisjmilk' In[105]:str.join(li) Out[105]:'amynameisjmilkbmynameisjmilkc'
replace()替换String中的元素
S.replace(old,new[,count])->string
将String中的元素替换为指定的新元素,还可以指定替换的数量。
In[113]:url='www.jmilk.com' In[114]:url.replace('jmilk','fan') Out[114]:'www.fan.com'
split()将string以指定的分隔符分裂成列表
S.split([sep[,maxsplit]])->listofstrings
输入指定的分割符和分割次数两个参数。
In[117]:url.split('.',2) Out[117]:['www','jmilk','com'] In[118]:url='www.jmilk.com' In[119]:url.split('.',2) Out[119]:['www','jmilk','com'] In[120]:url.split('.',1) Out[120]:['www','jmilk.com']
strip()修剪在String两端的Char
S.strip([chars])->stringorunicode
将String两端的Chars去掉,并不能去掉String中间的subString
In[124]:url.strip('w') Out[124]:'.jmilk.com' In[125]:url.strip('m') Out[125]:'www.jmilk.co' In[126]:url.strip('om') Out[126]:'www.jmilk.c'
最后
同样是序列对象一份子的List类型,一样有着非常多有意思的内置方法,我们下回再继续学习。
更多关于Python相关内容可查看本站专题:《Python列表(list)操作技巧总结》、《Python字符串操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。