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中处理字符串之ljust()方法的使用简介
May 19 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 Python
python和shell获取文本内容的方法
Jun 05 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
Django 大文件下载实现过程解析
Aug 01 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
Python实现弹球小游戏
Aug 01 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 验证图片生成函数
2009/05/21 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP合并静态文件详解
2014/11/14 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
js闭包实例汇总
2014/11/09 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
师范大学音乐表演专业求职信
2013/10/23 职场文书
个人党性剖析材料
2014/02/03 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
文明城市创建标语
2014/06/16 职场文书
大学生实习推荐信
2015/03/27 职场文书
六年级语文教学反思
2016/03/03 职场文书