Python学习手册(第4版).4
要表示字符串 Bob said "I'm OK".
由于 ' 和 " 会引起歧义,因此,我们在它前面插入一个\表示这是一个普通字符,不代表字符串的起始,因此,这个字符串又可以表示为
'Bob said \"I\'m OK\".'
注意:转义字符 \ 不计入字符串的内容中。
常用的转义字符还有:
\n 表示换行
\t 表示一个制表符
\\ 表示 \ 字符本身
三个引号或淡引号
Python也支持原始(raw)字符串常量,即去掉反斜线转义机制(这样的字符串常量是以字母“r”开头的)。
模式匹配
在继续学习之前,值得关注的一点就是字符串对象的方法能够支持基于模式的文本处理。文本的模式匹配是本书范围之外的一个高级工具,但是有其他脚本语言背景的读者也许对在Python中进行模式匹配很感兴趣,我们需要导入一个名为re的模块。这个模块包含了类似搜索、分割和替换等调用,但是因为使用模式去定义子字符串,可以更通用一些:
>>> import re
>>> match = re.match('Hello[ \t]*(.*)world','Hello Python world')
>>> match.group(1)
'Python '
这个例子的目的是搜索子字符串,这个子字符串以“Hello,”开始,后面跟着零个或几个制表符或空格,接着有任意字符并将其保存至匹配的group中,最后以“world.”结尾。如果找到了这样的子字符串,与模式中括号包含的部分匹配的子字符串的对应部分保存为组。
通过help可知:编译一个正则表达式模式,返回一个模式对象。
第二个参数flags是匹配模式,可以使用按位或’|’表示同时生效,也可以在正则表达式字符串中指定。
Pattern对象是不能直接实例化的,只能通过compile方法得到。
列表是一个任意类型的对象的位置相关的有序集合,它没有固定的大小。
Python的列表与其他语言中的数组有些类似,但是列表要强大得多。其中一个方面就是,列表没有固定类型的约束。例如,上个例子中接触到的列表,包含了三个完全不同类型的对象(一个整数、一个字符串,以及一个浮点数)。此外,列表没有固定大小,也就是说能够按照需要增加或减小列表大小,来响应其特定的操作:
操做
python的pop方法是按照下标索引来删除列表中的元素 而remove是按照列表中的值来删除元素~
1.先创建一个列表a,然后dir(a),就能够得到内置的所有列表可以进行的操作:'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
想要了解每个函数的用法,就help(a.函数),下面的数据类型同
2.先创建一个字符串b,然后dir(b),就能够得到内置的所有字符串可以进行的操作:'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit',
'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'
3.先创建一个字典c,然后dir(c),就能够得到内置的所有字典可以进行的操作:'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'
操作
Python核心数据类型的一个优秀的特性就是它们支持任意的嵌套。
能够以任意的组合对其进行嵌套,并可以多个层次进行嵌套(例如,能够让一个列表包含一个字典,并在这个字典中包含另一个列表等)。
这种特性的一个直接的应用就是实现矩阵,或者Python中的“多维数组”。
一个嵌套列表的列表能够完成这个基本的操作:
可以展开循环列表
列表解析
处理序列的操作和列表的方法中,Python还包括了一个更高级的操作,称作列表解析表达式(list comprehension expression),从而提供了一种处理像矩阵这样结构的强大工具。例如,假设我们需要从列举的矩阵中提取出第二列。因为矩阵是按照行进行存储的,所以通过简单的索引即可获取行,使用列表解析可以同样简单地获得列。
>>> col2 = [row[1] for row in M] # Collect the items in column 2
>>> col2
[2,5,8]
>>> M # The matrix is unchanged
[[1,2,3],[4,5,6],[7,8,9]]
列表解析源自集合的概念。
它是一种通过对序列中的每一项运行一个表达式来创建一个新列表的方法,每次一个,从左至右。
列表解析是编写在方括号中的(提醒你在创建列表这个事实),并且由使用了同一个变量名的(这里是row)表达式和循环结构组成
。
已经显露出Python许多特性了,可变对象与不可变对象,通用序列操作与类型特定方法,分片(slice),嵌套,列表解析表达式(list comprehension expression)。
由左至右:中括号,循环结构中的元素构成的表达式,循环结构,循环结构中的元素构成的条件语句。
更完整的形式:
新列表 = [表达式 for 每个元素 in 可迭代集合 if 条件]
之前的这个列表解析表达基本上就是它字面上所讲的:“把矩阵M的每个row中的row[1],放在一个新的列表中”
col2 = [row[1] for row in M] 。
其结果就是一个包含了矩阵的第二列的新列表。实际应用中的列表解析可以更复杂:
>>> [row[1] + 1 for row in M] # Add 1 to each item in column 2
[3,6,9]
>>> [row[1] for row in M if row[1] % 2 == 0] # Filter out odd items
[2,8]
例如,这里的第一个操作,把它搜集到的每一个元素都加了1,第二个使用了一个if条件语句,通过使用%求余表达式(取余数)过滤了结果中的奇数。列表解析创建了新的列表作为结果,但是能够在任何可迭代的对象上进行迭代。例如,这里我们将会使用列表解析去步进坐标的一个硬编码列表和一个字符串:
>>> diag = [M[i][i] for i in [0,1,2]] # Collect a diagonal from matrix
>>> diag
[1,5,9]
>>> doubles = [c * 2 for c in 'spam'] # Repeat characters in a string
>>> doubles
['ss','pp','aa','mm']