Python核心编程——序列:字符串列表和元组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python核心编程——序列:字符串列表和元组相关的知识,希望对你有一定的参考价值。
1.序列
序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量的方式得到。而多个元素可以通过切片操作的方式一次得到。下标偏移量是从0 开始到 总元素数-1 结束 -- 之所以要减一是因为我们是从0 开始计数的。
序列类型操作符 | |
序列操作符 | 作用 |
seq[ind] | 获得下标为ind 的元素 |
seq[ind1:ind2] | 获得下标从ind1 到ind2 间的元素集合 |
seq * expr | 序列重复expr 次 |
seq1 + seq2 | 连接序列seq1 和seq2 |
obj in seq | 判断obj 元素是否包含在seq 中 |
obj not in seq | 判断obj 元素是否不包含在seq 中 |
成员关系操作符 (in, not in):成员关系操作符使用来判断一个元素是否属于一个序列的。in/not in 操作符的返回值一般来讲就是True/False,满足成员关系就返回True,否则返回False。该操作符的语法如下:obj [not] in sequence
连接操作符(+):这个操作符允许我们把一个序列和另一个相同类型的序列做连接。语法如下:sequence1 + sequence2。该表达式的结果是一个包含sequence1 和sequence2 的内容的新序列。
重复操作符(*):当你需要需要一个序列的多份拷贝时,重复操作符非常有用,它的语法如下:sequence * copies_int。该操作符返回一个新的包含多份原对象拷贝的对象。
切片操作符([],[:],[::]):所谓序列类型就是包含一些顺序排列的对象的一个结构。你可以简单的用方括号加一个下标的方式访问它的每一个元素,或者通过在方括号中用冒号把开始下标和结束下标分开的方式来访问一组连续的元素。
序列类型是其元素被顺序放置的一种数据结构类型,这种方式允许通过指定下标的方式来获得某一个数据元素,或者通过指定下标范围来获得一组序列的元素.这种访问序列的方式叫做切片,我们通过切片操作符就可以实现我们上面说到的操作。访问某一个数据元素的语法如下:sequence[index]。sequence 是序列的名字,index 是想要访问的元素对应的偏移量。偏移量可以是正值,范围从0 到偏移最大值(比序列长度少一),用len()函数,可以得到序列长度,实际的范围是 0 <= inde <= len(sequece)-1 。另外,也可以使用负索引,范围是 -1 到序列的负长度,-len(sequence), -len(sequence) <= index <= -1。正负索引的区别在于正索引以序列的开始为起点,负索引以序列的结束为起点。
因为Python 是面向对象的,所以你可以像下面这样直接访问一个序列的元素(不用先把它赋值给一个变量):
>>> print (‘Faye‘, ‘Leanna‘, ‘Daylen‘)[1]
Leanna
若想一次得到多个元素呢?只要简单的给出开始和结束的索引值,并且用冒号分隔就可以了,其语法如下:sequence[starting_index:ending_index]。通过这种方式我们可以得到从起始索引到结束索引(不包括结束索引对应的元素)之间的一"片"元素.起始索引和结束索引都是可选的,如果没有提供或者用None 作为索引值,切片操作会从序列的最开始处开始,或者直到序列的最末尾结束。序列的最后一个切片操作是扩展切片操作,它多出来的第三个索引值被用做步长参数。
内建函数list(),str()和tuple()被用做在各种序列类型之间转换。
序列类型转换工厂函数 | |
函数 | 含义 |
list(iter) | 把可迭代对象转换为列表 |
str(obj) | 把obj 对象转换成字符串(对象的字符串表示法) |
unicode(obj) | 把对象转换成Unicode 字符串(使用默认编码) |
basestring() |
抽象工厂函数,其作用仅仅是为str 和unicode 函数提供父类,所以不能被 |
tuple(iter) | 把一个可迭代对象转换成一个元组对象 |
序列类型可用的内建函数 | |
函数名 | 功能 |
enumerate(iter) |
接受一个可迭代对象作为参数,返回一个enumerate 对象(同时也是一个迭代器),该对象生成由iter 每个元素的index 值和item 值组成的元组(PEP 279) |
len(seq) | 返回seq 的长度 |
max(iter,key=None) 0r max(arg0,arg1……,key=None) |
返回iter 或(arg0,arg1,...)中的最大值,如果指定了key,这个key 必须是一个可以传给sort()方法的,用于比较的回 |
min(iter,key=None) or min(arg0,arg1……,key=None) |
返回iter 里面的最小值;或者返回(arg0,arg2,...)里面
的最小值;如果指定了key,这个key 必须是一个可以传给 |
reversed(seq) | 接受一个序列作为参数,返回一个以逆序访问的迭代器(PEP 322) |
sorted(iter,func=None,key=None,reverse=False) |
接受一个可迭代对象作为参数,返回一个有序的列表;可选参数func,key 和reverse 的含义跟list.sort()内建函数的参数含义一 |
sum(seq,init=0) |
返回seq 和可选参数init 的总和, 其效果等同于reduce(operator.add,seq,init) |
zip([it0,it1,……itN]) |
返回一个列表,其第一个元素是it0,it1,...这些元素的第一个元素组成的一个元组,第二个...,类推. |
2.字符串
字符串类型是Python 里面最常见的类型.我们可以简单地通过在引号间包含字符的方式创建它。Python 里面单引号和双引号的作用是相同的。字符串是不可变类型,就是说改变一个字符串的元素需要新建一个新的字符串.字符串是由独立的字符组成的,并且这些字符可以通过切片操作顺序地访问。
创建一个字符串就像使用一个标量一样简单,在字符串后用方括号加一个或者多于一个索引的方式来获得子串。通过给一个变量赋值(或者重赋值)的方式“更新”一个已有的字符串.新的值可能与原有值差不多,也可能跟原有串完全不同。跟数字类型一样,字符串类型也是不可变的,所以你要改变一个字符串就必须通过创建一个新串的方式来实现。也就是说你不能只改变一个字符串的一个字符或者一个子串,然而,通过拼凑一个旧串的各个部分来得到一个新串是被允许的。
字符串是不可变的,所以你不能仅仅删除一个字符串里的某个字符,你能做的是通过赋一个空字符串或者使用del 语句来清空或者删除一个字符串。
3.字符串和操作符
正向索引时,索引值开始于0,结束于总长度减1(因为我们是从0 开始索引的)。在这个范围内,我们可以访问任意的子串。用一个参数来调用切片操作符结果是一个单一字符,而使用一个数值范围(用‘:‘)作为参数调用切片操作的参数会返回一串连续地字符。再强调一遍,对任何范围[start:end],我们可以访问到包括start 在内到end(不包括end)的所有字符,换句话说,假设x 是[start:end]中的一个索引值,那么有: start<= x < end。
在进行反向索引操作时,是从-1 开始,向字符串的开始方向计数,到字符串长度的负数为索引的结束(-len(str))。如果开始索引或者结束索引没有被指定,则分别以字符串的第一个和最后一个索引值为默认值。
注:起始/结束索引都没有指定的话会返回整个字符串。
成员操作符(in ,not in):成员操作符用于判断一个字符或者一个子串(中的字符)是否出现在另一个字符串中。出现则返回True,否则返回False。
注:成员操作符不是用来判断一个字符串是否包含另一个字符串的,这样的功能由find()或者index()(还有它们的兄弟:rfind()和rindex())函数来完成。
连接符( + ):运行时刻字符串连接。通过连接操作符来从原有字符串获得一个新的字符串。
编译时字符串连接,Python 的语法允许你在源码中把几个字符串连在一起写,以此来构建新字符串。可以在一行里面混用两种引号,这种写法的好处是你可以把注释也加进来。
若把一个普通字符串和一个Unicode 字符串做连接处理,Python 会在连接操作前先把普通字符串转化为Unicode 字符串。
重复操作符创建一个包含了原有字符串的多个拷贝的新串。
4.只适用于字符串的操作符
格式化操作符(%):只适用于字符串类型。ex:print("str %s %d" % (name,20)) =》str name 20
字符串格式化符号 | |
格式化字符 | 转换方式 |
%c | 转换成字符(ASCII 码值,或者长度为一的字符串) |
%r | 优先用repr()函数进行字符串转换 |
%s | 优先用str()函数进行字符串转换 |
%d %i | 转成有符号十进制数 |
%u | 转成无符号十进制数 |
%o | 转成无符号八进制数 |
%x %X |
(Unsigned)转成无符号十六进制数(x/X 代表转换后的十六进制字符的大小写) |
%e %E | 转成科学计数法(e/E 控制输出e/E) |
%f %F | 转成浮点数(小数部分自然截断) |
%g %G | %e 和%f/%E 和%F 的简写 |
%% | 输出% |
格式字符串既可以跟print 语句一起用来向终端用户输出数据,又可以用来合并字符串形成新字符串,而且还可以直接显示到GUI(Graphical User Interface)界面上去。
格式化操作符辅助指令 | |
符号 | 作用 |
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# |
在八进制数前面显示零(‘0‘),在十六进制前面显示‘0x‘或者‘0X‘(取决于用的是‘x‘还是‘X‘) |
0 | 显示的数字前面填充‘0’而不是默认的空格 |
% | ‘%%‘输出一个单一的‘%‘ |
(var) | 映射变量(字典参数) |
m.n | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
Template 对象有两个方法,substitute()和safe_substitute()。前者更为严谨,在key 缺少的情况下它会报一
个KeyError 的异常出来,而后者在缺少key 时,直接原封不动的把字符串显示出来。
原始字符串操作符(r/R):在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。正则表达式是一些定义了高级搜索匹配方式的字符串,通常是由代表字符,分组、匹配信息、变量名、和字符类等的特殊符号组成。这个‘r‘可以是小写也可以是大写,唯一的要求是必须紧靠在第一个引号前。
Unicode字符串操作符(u/U):把标准字符串或者是包含Unicode 字符的字符串转换成完全地Unicode 字符串对象。Unicode 操作符必须出现在原始字符串操作符前面
5.内建函数
cmp():同比较操作符一样,内建的cmp()函数也根据字符串的ASCII 码值进行比较。
len():内建函数len()返回字符串的字符数。
max() and min(): 对于string 类型它们能很好地运行,返回最大或者最小的字符,(按照ASCII 码值排列)。
enumerate():>>> s = ‘foobar‘
>>> for i, t in enumerate(s):
... print i, t
...
0 f
1 o
2 o
3 b
4 a
5 r
zip():>>> s, t = ‘foa‘, ‘obr‘
>>> zip(s, t)
[(‘f‘, ‘o‘), (‘o‘, ‘b‘), (‘a‘, ‘r‘)]
raw_input():内建的raw_input()函数使用给定字符串提示用户输入并将这个输入返回。
str() and unicode():str()和unicode()函数都是工厂函数,就是说产生所对应的类型的对象。它们接受一个任意类型的对象,然后创建该对象的可打印的或者Unicode 的字符串表示。它们和basestring 都可以作为参数传给isinstance()函数来判断一个对象的类型。
chr(),unichr(), and ord():chr()函数用一个范围在range(256)内的(就是0 到255)整数做参数,返回一个对应的字符。unichr()跟它一样,只不过返回的是Unicode 字符,
以上是关于Python核心编程——序列:字符串列表和元组的主要内容,如果未能解决你的问题,请参考以下文章