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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
python使用marshal模块序列化实例
Sep 25 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
python实现傅里叶级数展开的实现
Jul 21 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
flask框架自定义url转换器操作详解
Jan 25 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
Django静态文件加载失败解决方案
Aug 26 Python
pytorch学习教程之自定义数据集
Nov 10 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
PHP调用VC编写的COM组件实例
2014/03/29 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
PHP中的类型约束介绍
2015/05/11 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
php工具型代码之印章抠图
2018/07/18 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JQuery优缺点分析说明
2010/06/09 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
2016/06/21 Javascript
js实现四舍五入完全保留两位小数的方法
2016/08/02 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
python 从远程服务器下载东西的代码
2013/02/10 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
美国家居装饰店:Pier 1
2019/09/04 全球购物
运动会广播稿20字
2014/02/18 职场文书
演讲稿格式范文
2014/05/19 职场文书
数控专业毕业生求职信
2014/06/12 职场文书