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:虽然元组本身不可变,但是元组可以包含可变的对象。

 

posted @ 2015-05-27 08:55  gqtc  阅读(208)  评论(0编辑  收藏  举报