Python序列对象与String类型内置方法详解


Posted in Python onOctober 22, 2019

本文实例讲述了Python序列对象与String类型内置方法。分享给大家供大家参考,具体如下:

前言

在Python数据结构篇中介绍了Python的序列类型数据结构,这次继续深入的学习序列和String类型对象的内建方法。

软件环境

  • 系统
    • UbuntuKylin 14.04
  • 软件
    • Python 2.7.3
    • IPython 4.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 = 'My name is Jmilk!'
In [21]: str[1:10:2]
Out[21]: 'ynm s'

首先切割除第2到10个元素(空格也算一个),再每隔1个元素挑选一个元素。

序列元素的反转

序列的索引还可以是负数,-1指向序列的最后一个元素,以此类推。Example:

In [30]: str[-1]
Out[30]: '!'
In [31]: tp[-1]
Out[31]: 'name'

还有下面两种有趣的玩法:

反转序列

In [27]: str
Out[27]: 'My name is Jmilk!'
In [28]: str[::-1]
Out[28]: '!klimJ si eman yM'

倒转删除元素

In [33]: str[:-2]
Out[33]: 'My name is Jmil'

删除了倒数第1到第2个元素。

连接操作符

连接操作符' + ‘,可以将若干个同类型的序列对象连接到一起。

In [1]: str = 'My name is '
In [2]: name = 'Jmilk'
In [3]: str + name
Out[3]: 'My name is Jmilk'
In [4]: name = ['Jmilk']
In [5]: str + name
---------------------------------------------------------------------------
TypeError                 Traceback (most recent call last)
<ipython-input-5-894081027c0a> in <module>()
----> 1 str + name
TypeError: cannot concatenate 'str' and 'list' objects

如果使用连接操作符处理两个不同类型的序列,会出现类型错误。

重复运算符

重复运算符' * ‘,能够让被操作数重复的n次,并生成一个新的同类型序列。

In [16]: star = '*'
In [17]: star * 10
Out[17]: '**********'
In [18]: star = ['*','*']
In [19]: star * 10
Out[19]: 
['*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*',
 '*']

成员关系符

成员运算符 in\not in 能够判断一个指定对象是否是作为一个容器中的元素,由此来判断两个对象间的关系。在Python运算符一篇中有详细的介绍,传送门:https://3water.com/article/172479.htm

In [333]: li = [1,2,3]
In [334]: 1 in li
Out[334]: True
In [335]: 1 not in li
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]: for i,word in enumerate(name,2):
  print i,word
  ....:   
2 m
3 y
4 
5 n
6 a
7 m
8 e
9 
10 i
11 s
12 
13 j
14 m
15 i
16 l
17 k

sorted() 序列的排序

sorted(iterable, cmp=None, key=None, reverse=False) ?> new sorted list

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 = lambda keyword:keyword[1])
Out[208]: [('c', 1), ('b', 2), ('a', 3)]

cmp函数:以第二个关键字为比较值排序

In [213]: sorted(li,cmp = lambda x,y:cmp(x[1],y[1]))
Out[213]: [('c', 1), ('b', 2), ('a', 3)]

reverse:逆序排列

In [216]: sorted(li,lambda z,x:cmp(z[1],x[1]),reverse=True)
Out[216]: [('a', 3), ('b', 2), ('c', 1)]

reversed() 返回一个逆序访问的迭代器

In [84]: for word in reversed(name):
  print word,
  ....:   
k l i m j  s i  e m a n  y m

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 = 'My name is Jmilk'
In [61]: sum(num)
Out[61]: 10
In [62]: sum(str)
---------------------------------------------------------------------------
TypeError                 Traceback (most recent call last)
<ipython-input-62-3a5f0824550a> in <module>()
----> 1 sum(str)
TypeError: unsupported operand type(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"My name is JMilk"
In [65]: name
Out[65]: u'My name is JMilk'

下面介绍适用于字符串的内建方法。

capitalize() 将字符串首字母变成大写

In [88]: str = 'my name is jmilk'
In [89]: str.capitalize()
Out[89]: 'My name is jmilk'

lower()、upper() 将字符串都使用小写、大写

In [90]: str.lower()
Out[90]: 'my name is jmilk'
In [91]: str.upper()
Out[91]: 'MY NAME IS JMILK'

title() 将字符串中单词的首字母变成大写,其余小写

In [92]: str.title()
Out[92]: 'My Name Is Jmilk'

index() 找到substring对应的元组的索引号

S.index(sub [,start [,end]]) -> int 在start-end的范围内找到substring对应的索引号,再返回一个int类型对象。

In [92]: str.title()
Out[92]: 'My Name Is Jmilk'
In [93]: str.title().index('J',2,13)
Out[93]: 11

当在指定范围内没有查询到substring时,会触发ValueError: substring not found的错误。同时可以看出,String类型对象调用了其内建方法后仍是String类型。

join() 将String插入到序列的元素之间

S.join(iterable) -> string 传递一个序列参数,会将String对象插入到序列的元素之间。即将序列的元素以String为分隔符连接起来,string对象可以为空。

In [103]: li = ['a','b','c']
In [104]: str
Out[104]: 'my name is jmilk'
In [105]: str.join(li)
Out[105]: 'amy name is jmilkbmy name is jmilkc'

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]]) -> list of strings

输入指定的分割符和分割次数两个参数。

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]) -> string or unicode

将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程序设计有所帮助。

Python 相关文章推荐
在Python中关于中文编码问题的处理建议
Apr 08 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
python中Apriori算法实现讲解
Dec 10 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
python读取中文txt文本的方法
Apr 12 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
使用PyCharm安装pytest及requests的问题
Jul 31 Python
Pycharm快捷键配置详细整理
Oct 13 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 Python
python非标准时间的转换
Jul 25 Python
Python基本语法之运算符功能与用法详解
Oct 22 #Python
基于Python实现拆分和合并GIF动态图
Oct 22 #Python
python  logging日志打印过程解析
Oct 22 #Python
安装2019Pycharm最新版本的教程详解
Oct 22 #Python
Python列表list常用内建函数实例小结
Oct 22 #Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 #Python
Python异常模块traceback用法实例分析
Oct 22 #Python
You might like
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
php,ajax实现分页
2008/03/27 PHP
php5中类的学习
2008/03/28 PHP
PHP写MySQL数据 实现代码
2009/06/15 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
php学习之运算符相关概念
2011/06/09 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
Python实用日期时间处理方法汇总
2015/05/09 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
院药学专业个人求职信
2013/09/21 职场文书
银行存款证明样本
2014/01/17 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
经济类毕业生求职信
2014/06/26 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
超详细Python解释器新手安装教程
2021/05/10 Python
Docker官方工具docker-registry案例演示
2022/04/13 Servers