Python基础:03序列:字符串、列表和元组
一:序列
1:连接操作符(+)
这个操作符允许把一个序列和另一个相同类型的序列做连接,生成新的序列。语法如下:sequence1 + sequence2
该表达式的结果是一个包含sequence1和sequence2 的内容的新序列。
注意,这个操作不是合并操作中最快或者说最有效的。对字符串来说,这个操作不如把所有的子字符串放到一个列表或可迭代对象中,然后调用一个join方法来把所有的内容连接在一起节约内存;
类似地,对列表来说,推荐用列表类型的extend()方法来把两个或者多个列表对象合并。
2:切片操作符([], [:], [::])
通过单一索引访问序列的一个元素的时候,如果访问一个越界的索引,会引发一个如下的异常:
>>>names = ('Faye', 'Leanna', 'Daylen') >>>print names[4] Traceback (most recent call last): File"<stdin>", line 1, in ? IndexError: tuple index out of range
切片访问方式,只要简单的给出开始和结束的索引值,并且用冒号分隔就可以了,其语法如下:
sequence[starting_index:ending_index]
通过这种方式可以得到从起始索引到结束索引(不包括结束索引对应的元素)之间的一"片"元素。起始索引和结束索引都是可选的,如果没有提供或者用None 作为索引值,切片操作会从序列的最开始处开始,或者直到序列的最末尾结束。
在切片访问中,没有越界一说,开始和结束素引值可以超过序列的范围。起始索引可以小于0,而对于结束索引,也可以超出序列的长度。
切片访问中,还可以有步长参数,该参数类似于range中的步长参数。步长默认为1。
3:内建函数
像list(), str(), tuple()这样的工厂函数,实际上是将参数内容浅拷贝到新生成的对象中。其实在连接操作和重复操作时,也是同样的浅拷贝。浅拷贝就是只复制了引用。
二:字符串
1:Python实际上有3类字符串:通常意义的字符串(str),Unicode字符串(unicode),还有一个抽象类basestring,str和unicode都是basestring的子类。这个basestring是不能实例化的。
2:在字符串中,成员操作符(in ,not in)用于判断一个字符或者一个子串是否出现在另一个字符串中。出现则返回True,否则返回False。
3:连接字符串,除了使用连接操作符(+)之外,更加推荐使用字符串格式化操作符(%),或者把所有字符串放到一个列表中,然后用join方法将它们连在一起:
>>> '%s %s' % ('Spanish', 'Inquisition') 'Spanish Inquisition' >>> s = ' '.join(('Spanish', 'Inquisition', 'Made Easy')) >>> s 'Spanish Inquisition Made Easy'
4:如果把一个普通字符串和一个Unicode字符串做连接处理,Python 会在连接操作前先把普通字符串转化为Unicode 字符串:
>>> 'Hello' + u' ' + 'World' + u'!' u'Hello World!'
5:格式化操作符(%)
Python支持两种格式的输入参数。第一种是元组,这基本上是一种C的printf()风格的转换参数集;
Python支持的第二种形式是字典形式,这种形式里面,key 是作为格式字符串出现,相对应的value 值作为参数在进行转化时提供给格式字符串。例子如下:
>>> adict = {'lang': 'Python', 'howmany':3} >>> 'There are %(howmany)d %(lang)s QuotationSymbols' % adict 'There are 3 Python Quotation Symbols'
格式字符串既可以跟print语句一起用来向终端用户输出数据,又可以用来合并字符串形成新字符串。
6:原始字符串
原始字符串是为了对付那些在字符串中出现的特殊字符。在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。原始字符串的这个特性让一些工作变得非常的方便,比如正则表达式的创建。
除了原始字符串符号(引号前面的字母"r")以外,原始字符串跟普通字符串有着几乎完全相同的语法。这个'r'可以是小写也可以是大写,唯一的要求是必须紧靠在第一个引号前。
比如需要一个反斜杠加一个'n',而不是一个换行符:
>>> '\n' '\n' >>> astr = '\n' >>> print astr >>> bstr = r'\n' >>> print bstr \n >>> r'\n' '\\n'
7:chr()、unichr()和ord()
chr()函数用一个范围在range(256)内的(就是0到255)整数做参数,返回一个对应的字符.unichr()跟它一样,只不过返回的是Unicode字符。
ord()函数是chr()函数(对于8 位的ASCII 字符串)或unichr()函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值,如果所给的Unicode 字符超出了你的Python 定义范围,则会引发一个TypeError 的异常。
>>> chr(65) 'A' >>> ord('a') 97 >>> unichr(12345) u'\u3039'
8:字符串内建方法join
str.join(iterable)
以str为分隔符,将seq中所有字符串合并为一个新的字符串,并返回新的字符串。比如:
>>> ''.join(('hello', 'world', 'hehe')) 'helloworldhehe' >>> ' '.join(('hello', 'world', 'hehe')) 'hello world hehe' >>> '-'.join(('hello', 'world', 'hehe')) 'hello-world-hehe'
三:列表
1:列表的比较
如果比较的是两个同类的对象,比较操作是非常直观的。比如数字和字符串,直接比较它们的值就行了。对于序列类型,比较操作稍微有点复杂了。
列表的比较,如果它的元素都是相同类型,则用标准的比较方法来作比较.否则,当我们比较list1和list2时,list1和list2进行逐项比较。如果比较的值相等,那么两个序列的下一个值继续比较,直到不相等的情况出现,或者到达较短的一个序列的末尾,在这种情况下,长的序列被认为是"较大"的。
a:对两个列表的元素进行比较.
b:如果比较的元素是同类型的,则比较其值,返回结果.
c:如果两个元素不是同一种类型,则检查它们是否是数字:
如果都是数字,执行必要的数字强制类型转换,然后比较。
如果有一方的元素是数字,则另一方的元素"大"(数字是"最小的")
否则,通过类型名字的字母顺序进行比较.
d:如果有一个列表首先到达末尾,则另一个长一点的列表"大".
e:如果比较完了两个列表的元素而且所有元素都是相等的,那么结果就是个平局,就是说返回一个0。
四:元组
1:虽然元组本身不可变,但是元组可以包含可变的对象。