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

本文实例讲述了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://www.jb51.net/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程序设计有所帮助。

(0)

相关推荐

  • Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题

    Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰.你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然). python3.0中怎么创建bytes型数据 bytes([1,2,3,4,5,6,7,8,9]) bytes("python"

  • 详解python string类型 bytes类型 bytearray类型

    一.python3对文本和二进制数据做了区分.文本是Unicode编码,str类型,用于显示.二进制类型是bytes类型,用于存储和传输.bytes是byte的序列,而str是unicode的序列. str类型: >>> s = u'你好' >>> s '你好' >>> type(s) <class 'str'> bytes类型: >>> b = b'abc' >>> b b'abc' >>&

  • Python查找两个有序列表中位数的方法【基于归并算法】

    本文实例讲述了Python查找两个有序列表中位数的方法.分享给大家供大家参考,具体如下: 今天做到的一个机试题目,很简单,这里简单记录一下: 我用的是归并的思想,当然还可以用递归的方法,下面是具体实现: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:找到两个有序列表的中位数 若列表总长度为奇数则直接返回中间下标的值 否则返回前一个值,如长度为6则返回下标为2处的值 ''' import random def rando

  • Python序列之list和tuple常用方法以及注意事项

    sequence 序列 sequence(序列)是一组有顺序的对象的集合.序列可以包含一个或多个元素,也可以没有任何元素. 我们之前所说的基本数据类型,都可以作为序列的对象.对象还可以是另一个序列.序列有两种:list (表) 和 tuple(元组) . list和tuple的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更. List 获得list元素的个数: 复制代码 代码如下: >>> lst=['更新慢','python',5.44,Fals

  • python魔法方法-自定义序列详解

    自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列(dict,tuple,list,string等). 如果要实现这个功能,就要遵循 python 的相关的协议.所谓的协议就是一些约定内容.例如,如果要将一个类要实现迭代,就必须实现两个魔法方法:__iter__.next(python3.x中为__new__).__iter__应该返回一个对象,这个对象必须实现 next 方法,通常返回的是 self 本身.而 next 方法必须在每次调用的时

  • python中使用序列的方法

    本文实例讲述了python中使用序列的方法.分享给大家供大家参考.具体如下: 列表.元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?序列的两个主要特点是索引操作符和切片操作符.索引操作符让我们可以从序列中抓取一个特定项目.切片操作符让我们能够获取序列的一个切片,即一部分序列. #!/usr/bin/python # Filename: seq.py shoplist = ['apple', 'mango', 'carrot', 'banana'] # Indexing or 'Sub

  • 浅析Python中的序列化存储的方法

    在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但是一旦程序结束,变量所占用的内存就被操作系统全部回收.如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'. 我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshal

  • Python 序列的方法总结

    最近在做Python 的项目,特地整理了下 Python 序列的方法.序列sequence是python中最基本的数据结构,本文先对序列做一个简单的概括,之后简单讲解下所有序列都能通用的操作方法. 任何序列都可以引用其中的元素(item). 下面的内建函数(built-in function)可用于列表(表,定值表,字符串) #s为一个序列 len(s) 返回: 序列中包含元素的个数 min(s) 返回:序列中最小的元素 max(s) 返回:序列中最大的元素 all(s) 返回:True,若果所

  • Python数据类型之String字符串实例详解

    本文实例讲述了Python数据类型之String字符串.分享给大家供大家参考,具体如下: String(字符串) 1.概述 字符串是以单引号或双引号括起来的任意文本,比如"abc",'xy'等等,请注意''或者""本身只是一种表示方式,并不是字符串的一部分. a.若字符串内部包含单引号又包含双引号怎么办? print('I\'m \"ok\"') 表示的字符串内容是: I'm "ok" 注意:转义字符\可以转义很多字符,比如\

  • python实现获取序列中最小的几个元素

    本文实例讲述了python实现获取序列中最小的几个元素.分享给大家供大家参考. 具体方法如下: import heapq import random def issorted(data): data = list(data) heapq.heapify(data) while data: yield heapq.heappop(data) alist = [x for x in range(10)] random.shuffle(alist) print 'the origin list is'

随机推荐