目录
第五天Python学习日记,学习字符串与序列。
字符串
字符串有多种形式,可以使用单引号(’……’),双引号("……")都可以获得同样的结果 。反斜杠 \ 可以用来转义
实例
>>> 'spam eggs' # single quotes
'spam eggs'
>>> 'doesn\'t' # use \' to escape the single quote...
"doesn't"
>>> "doesn't" # ...or use double quotes instead
"doesn't"
>>> '"Yes," they said.'
'"Yes," they said.'
>>> "\"Yes,\" they said."
'"Yes," they said.'
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
在交互式解释器中,输出的字符串外面会加上引号,特殊字符会使用反斜杠来转义。 虽然有时这看起来会与输入不一样,但两个字符串是相同的。 如果字符串中有单引号而没有双引号,该字符串外将加双引号来表示,否则就加单引号。
print() 函数会生成可读性更强的输出,即略去两边的引号,并且打印出经过转义的特殊字符。
实例
>>> '"Isn\'t," they said.'
'"Isn\'t," they said.'
>>> print('"Isn\'t," they said.')
"Isn't," they said.
>>> s = 'First line.\nSecond line.' # \n means newline
>>> s # without print(), \n is included in the output
'First line.\nSecond line.'
>>> print(s) # with print(), \n produces a new line
First line.
Second line.
字符串字面值可以跨行连续输入。一种方式是用三重引号:"""…""" 或 ‘’’…’’’。字符串中的回车换行会自动包含到字符串中,如果不想包含,在行尾添加一个 \ 即可。如下例
print("""\
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
""")
结果为
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
字符串可以用 + 进行连接(粘到一起),也可以用 * 进行重复
>>> 3 * 'un' + 'ium'
'unununium'
把很长的字符串拆开分别输入的时候尤其有用
>>> text = ('Put several strings within parentheses '
... 'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'
字符串是可以被 索引 (下标访问)的,第一个字符索引是 0。单个字符并没有特殊的类型,只是一个长度为一的字符串。索引也可以用负数,这种会从右边开始数。
>>> word = 'Python'
>>> word[0] # character in position 0
'P'
>>> word[5] # character in position 5
'n'
>>> word[-1] # last character
'n'
>>> word[-2] # second-last character
'o'
>>> word[-6]
'P'
序列
序列类型
有三种基本序列类型:list, tuple 和 range 对象。
通用序列操作
在表格中,s 和 t 是具有相同类型的序列,n, i, j 和 k 是整数而 x 是任何满足 s 所规定的类型和值限制的任意对象。
in 和 not in 操作具有与比较操作相同的优先级。 + (拼接) 和 * (重复) 操作具有与对应数值运算相同的优先级。
运算 | 结果 |
---|---|
x in s | 如果 s 中的某项等于 x 则结果为 True,否则为 False |
x not in s | 如果 s 中的某项等于 x 则结果为 False,否则为 True |
s + t | s 与 t 相拼接 |
s * n 或 n * s | 相当于 s 与自身进行 n 次拼接 |
s[i] | s 的第 i 项,起始为 0 |
s[i:j] | s 从 i 到 j 的切片 |
s[i:j:k] | s 从 i 到 j 步长为 k 的切片 |
len(s) | s 的长度 |
min(s) | s 的最小项 |
max(s) | s 的最大项 |
s.index(x[, i[, j]]) | x 在 s 中首次出现项的索引号(索引号在 i 或其后且在 j 之前) |
s.count(x) | x 在 s 中出现的总次数 |
实例1
>>> "gg" in "eggs"
True
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]
实例2
>>> r = range(0, 20, 2)
>>> r
range(0, 20, 2)
>>> 11 in r
False
>>> 10 in r
True
>>> r.index(10)
5
>>> r[5]
10
>>> r[:5]
range(0, 10, 2)
>>> r[-1]
18
注意 相同类型的序列也支持比较。特别地,tuple 和 list 的比较是通过比较对应元素的字典顺序。 这意味着想要比较结果相等,则每个元素比较结果都必须相等,并且两个序列长度必须相同。
序列比较
序列对象通常可以与相同序列类型的其他对象比较。
这种比较使用字典式顺序:
1.首先比较开头的两个对应元素,如果两者不相等则比较结果就由此确定;2.如果两者相等则比较之后的两个元素,以此类推,直到有一个序列被耗尽。
如果要比较的两个元素本身又是相同类型的序列,则会递归地执行字典式顺序比较。
如果两个序列中所有的对应元素都相等,则两个序列也将被视为相等。
如果一个序列是另一个的初始子序列,则较短的序列就被视为较小(较少)。
对于字符串来说,字典式顺序是使用 Unicode 码位序号对单个字符排序。
下面是一些相同类型序列之间比较的例子:
(1, 2, 3) < (1, 2, 4)
[1, 2, 3] < [1, 2, 4]
‘ABC’ < ‘C’ < ‘Pascal’ < ‘Python’
(1, 2, 3, 4) < (1, 2, 4)
(1, 2) < (1, 2, -1)
(1, 2, 3) == (1.0, 2.0, 3.0)
(1, 2, (‘aa’, ‘ab’)) < (1, 2, (‘abc’, ‘a’), 4)
注意对不同类型对象来说,只要待比较对象提供了合适的比较方法,就可以使用 < 和 > 来比较。例如,混合数值类型是通过他们的数值进行比较的,所以 0 等于 0.0,等等。否则,解释器将抛出一个 TypeError 异常,而不是随便给出一个结果。