Lesson 2-1 (数据结构,序列通用的操作)
2.0 数据结构
--- 数据结构是以某种方式组合起来的数据元素集合。
--- python的常见的数据结构
2.1 序列(sequence)
--- 序列中的每个元素都有编号,即索引(也称为下标)。
--- 第一个位置索引为0,第二为1,依次类推。也可用负索引,末尾位置为-1,倒数第二为-2,依次类推。
--- 元组是一种特殊的序列,类似于列表,但是不能修改。
2.2 通用的序列操作
2.2.1 索引(indexing)
--- 可通过索引来获取序列中该位置的元素,索引只能是整数,不能是浮点数。
--- 序列从左往右,索引由0开始递增;序列从右往左,索引由-1开始递减。
1 >>> seq = "Hello world!" 2 >>> seq[0] 3 'H' 4 >>> seq[7] 5 'o' 6 >>> seq[-1] 7 '!' 8 >>> seq[-3] 9 'l' 10 >>>
--- 多重序列中的索引表示法
1 >>> seq = [["H", "e", "l", "l", "o"], ["w", "o", "r", "l", "d"]] 2 >>> seq[0] 3 ['H', 'e', 'l', 'l', 'o'] 4 >>> seq[0][1] 5 'e' 6 >>> seq[-1][-3] 7 'r' 8 >>>
2.2.2 切片(slicing)
--- 使用索引可以访问序列中的单个元素,使用切片可以访问序列中特定范围内的元素。
--- 切片表示法:[ A : B : C ] ,其中,A表示切片开始处的索引(包括),B表示切片结束处的索引(不包括),C表示切片的步长(可省略,默认为1,不能为0,但可以为负数)。
--- 即A和B是两个索引,用来指定切片的边界,并遵循左闭右开原则。
1 >>> seq = "Hello world!" 2 >>> seq[1:7] 3 'ello w' 4 >>> seq[1:7:2] 5 'el ' 6 >>> seq[-3:-1] 7 'ld' 8 >>> seq[-10:-1:3] 9 'l r' 10 >>>
--- 当步长为默认或正数时,A索引必须比B索引位于序列的左边,否则访问到的是空序列。步长为负数时,则正好相反。
>>> seq = "Hello world!" >>> seq[7:2] '' >>> seq[-1:-5] '' >>>
--- 省略表示法。如果从序列最左边开始,则A索引可省略;如果到序列最末尾结束,则B索引可省略;如果A、B索引都省略,则表示访问整个序列。
1 >>> seq = "Hello world!" 2 >>> seq[ :7] 3 'Hello w' 4 >>> seq[-7: ] 5 ' world!' 6 >>> seq[ : ] 7 'Hello world!' 8 >>>
--- 步长为负数时,表示从序列的右边开始往左访问序列中的元素。A、B索引为空,步长为-1,则表示颠倒顺序访问序列中的元素。
1 >>> seq = "Hello world!" 2 >>> seq[7:1:-1] 3 'ow oll' 4 >>> seq[7:1:-2] 5 'o l' 6 >>> seq[-2:-8:-1] 7 'dlrow ' 8 >>> seq[-2:-8:-2] 9 'drw' 10 >>> seq[ : :-1] 11 '!dlrow olleH' 12 >>>
2.2.3 序列相加
--- 可使用加法运算符拼接序列
--- 不能拼接不同类型的序列
1 >>> seq_1 = "Hello " 2 >>> seq_2 = "world!" 3 >>> seq = seq_1 + seq_2 4 >>> seq 5 'Hello world!' 6 >>> seq_1 = "Hello " 7 >>> seq_2 = [1, 2, 3] 8 >>> seq = seq_1 + seq_2 9 Traceback (most recent call last): 10 File "<stdin>", line 1, in <module> 11 TypeError: must be str, not list 12 >>>
2.2.4 序列乘法(复制)
--- 序列与整数n相乘时,将复制这个序列n次来得到一个新序列,从而实现序列的复制。
1 >>> seq = "Hello " * 5 2 >>> seq 3 'Hello Hello Hello Hello Hello ' 4 >>>
2.2.5 成员资格
--- 检查特定值是否包含在序列中,使用 in 和 not in 运算符。检查结果返回布尔值True和False。
1 >>> seq = "Hello world!" 2 >>> "e" in seq 3 True 4 >>> "h" in seq 5 False 6 >>> "h" not in seq 7 True 8 >>>
2.2.6 序列长度、最小值和最大值
--- 可通过内置函数len、min和max得出序列相对应的长度、最小值和最大值。最小、最大值比较依据元素在ASCII码表中的ASCII值。
1 >>> seq = "Hello world!" 2 >>> len(seq) 3 12 4 >>> min(seq) 5 ' ' 6 >>> max(seq) 7 'w' 8 >>> seq = [1, 2, 3, -4] 9 >>> min(seq) 10 -4 11 >>> max(seq) 12 3 13 >>>