备忘知识¶
约 849 个字 6 行代码 预计阅读时间 3 分钟
1 内置类型¶
1.2 序列类型¶
通用序列操作¶
大多数序列类型,无论是可变类型还是不可变类型都支持下表中的操作,这里的 s 和 t 都是具有相同类型的序列,n,i,j,k 是整数,x 是满足序列定义的任何元素。
x in s如果s中的某项等于x,则返回True,否则返回False;在str与bytes、bytearray类型中,这也可以用于检查子序列:'ab' in 'abc'返回True。x not in s如果s中的某项等于x,则返回False,否则返回True。s + t返回s和t拼接的序列。- 某些序列类型仅仅支持特定模式的项序列,因此不支持序列拼接或者重复,比如
range。 - 拼接不可变序列总是会生成新的对象,下面是一些可以降低开销到线性的方法:
- 对于
str类型,可以使用str.join()方法,或者写入io.StringIO对象,结束的时候再获取值; - 对于
bytes类型,可以使用bytes.join()方法,或者写入io.BytesIO对象,也可以使用bytearray对象进行原地拼接,因为bytearray是可变的,并且有高效的重分配机制; - 对于
tuple类型,可以改为扩展list类。
- 某些序列类型仅仅支持特定模式的项序列,因此不支持序列拼接或者重复,比如
s * n或n * s返回由s的n个拷贝构成的序列。- 但是序列
s中的项并不会被拷贝,它们会被多次引用,所以会造成下面的问题:原因是[[]]其实是一个包含了空列表的单元素列表,* 3后结果的三个元素都是对这个空列表的引用,修改其中一个元素的值,其他两个也会受到影响,同时受到修改,应该修改成lists = [[] for _ in range(3)];
- 但是序列
s[i]返回序列s中的第i个元素,i是整数。s[i:j]返回序列s中的第i到j - 1个元素构成的序列,i和j是整数。j是切片的终止位置,可以理解成尾后位置,这样的切片定义成所有满足i <= k < j的索引号k的项组成的序列。- 如果
i或者j超出了len(s),那么会被替换为len(s)。 - 如果
i被省略或者被替换成None,那么会被替换为0,如果j被省略或者被替换成None,那么会被替换为len(s); - 如果
i >= j,那么切片为空。
s[i:j:k]返回序列s从i到j步长为k的切片,具体定义所有满足0 <= n < (j-i)/k的索引号为i + n * k的项组成的序列。如果i或j被省略或为None,它们会成为“终止”,比如我们常用的s[::-1]就会得到一个反转的列表。len(s)返回序列s的长度。max(s)/min(s)返回序列s中的最大/最小值;如果序列为空,会抛出ValueError。s.index(x[, i[, j]]):x在s中首次出现项的索引号,后面两个是可选参数,分别表示在i之后和在j之前搜索。- 如果
x不在s中,会抛出ValueError。
- 如果
s.count(x)返回x在s中出现的次数,没出现就会返回0。
文本序列类型¶
str 类型¶
Python 中的 str 是 Unicode 码位的构成的不可变序列。字符串字面值允许多种写法:
- 单引号:
'allows embedded "double" quotes'; - 双引号:
"allows embedded 'single' quotes"; - 三重引号:
'''Three single quotes'''或"""Three double quotes"""。
使用三重引号的字符串字面值可以跨越多行,所有的空白(包括换行符)都会被包含在字符串中,可以使用 \ 来避免这种情况。
格式字符串/f-string¶
二进制序列类型¶
类型转化¶
File I/O¶
打开文件首先要使用 open() 函数,open(filename, mode, encoding="utf-8") 会返回一个 file object:第一个参数是包含了文件名的字符串;第二个参数是指定了文件使用方式的字符串,常见的有:
r:只读模式(默认);w:只写模式,创建新文件(覆盖同名文件),并且先截断文件;a:追加模式,打开一个文件用于追加到末尾,如果文件不存在则创建;*b:b作为后缀,表示二进制模式;+:读写模式,打开用于更新;t:文本模式(默认);
默认的参数是 r 并且与 rt 同义,也就是通常情况下,文件是以 text mode 模式打开的,从文件中读写字符串,这些字符串是以特定的形式编码的,返回参数都是 str,可以在 open() 函数中指定 encoding 参数来指定编码方式,不然就以平台默认的字节编码解码。