22 - 序列类型

常见内置序列类型(Sequence Type)

类型 英文名 对应关键字 构造函数 是否可变
列表 list list list() 可变
元组 tuple tuple tuple() 不可变
数字序列:range range range range() 不可变
文本序列:字符串 string str str() 不可变

通用序列操作(Common Sequence Operation)

大多数序列类型,包括可变类型和不可变类型都支持下表中的操作。

此表按优先级升序列出了序列操作。 在表格中,st 是具有相同类型的序列,n, i, jk 是整数而 x 是任何满足 s 所规定的类型和值限制的任意对象。

Note:
(序列的切片一般支持负索引,但笔者很少用负索引,一般只它来获取最后一位)
(s.index 如果找不到结果会报错)

运算 结果:
x in s 如果 s 中的某项等于 x 则结果为 True,否则为 False
x not in s 如果 s 中的某项等于 x 则结果为 False,否则为 True
s + t st 相拼接(concatenation)
s * nn * s 相当于 s 与自身进行 n 次拼接
s[i] s 的第 i 项,起始为 0
s[i:j] sij 的切片(slice )
s[i:j:k] sij 步长为 k 的切片
len(s) s 的长度
min(s) s 的最小项
max(s) s 的最大项
s.index(x[, i[, j]]) xs 中首次出现项的索引号(index)(索引号在 i 或其后且在 j 之前)
s.count(x) xs 中出现的总次数

可变序列 - 列表(list)

列表是可变序列,通常用于存放同类项目的集合。

列表的构建方式:

  • 使用一对方括号来表示空列表: []
  • 使用方括号,其中的项以逗号分隔: [a], [a, b, c]
  • 使用列表推导式: [x for x in iterable]
  • 使用类型的构造器: list()list(iterable)

列表内置方法:

  • sort(*, key=None, reverse=False)

    此方法会对列表进行排序,只使用 < 来进行各项间比较。

    • reverse 如果设为 True,则每个列表元素将按反向顺序比较进行排序。
    • key 一个对列表内元素进行预处理的函数,通常用于处理非数据类型列表。

可变序列 (列表) 支持的操作:

表格中的 s 是可变序列类型的实例(instance),t 是任意可迭代对象(iterable object),而 x 是符合对 s 所规定类型与值限制的任何对象。

(当 s.remove(x) 找不到 x 时会报错 ValueError)

运算 结果:
s[i] = x s 的第 i 项替换为 x
s[i:j] = t sij 的切片替换为可迭代对象 t 的内容
del s[i:j] 等同于 s[i:j] = []
s[i:j:k] = t s[i:j:k] 的元素替换为 t 的元素
del s[i:j:k] 从列表中移除 s[i:j:k] 的元素
s.append(x) x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x])
s.clear() s 中移除所有项 (items)(等同于 del s[:])
s.copy() 创建 s 的浅拷贝(shallow copy) (等同于 s[:])
s.extend(t)s += t t 的内容扩展 s (基本上等同于 s[len(s):len(s)] = t)
s *= n 使用 s 的内容重复 n 次来对其进行更新
s.insert(i, x) 在由 i 给出的索引位置将 x 插入 s (等同于 s[i:i] = [x])
s.pop()s.pop(i) 提取在 i 位置上的项,并将其从 s 中移除,i 默认为 -1
s.remove(x) 删除 s 中第一个 s[i] 等于 x 的项目。
s.reverse() 就地将列表中的元素逆序。

不可变序列

元组(tuple)

元组是不可变序列,实现了所有通用序列操作。

元组的构建方式:

  • 使用一对圆括号来表示空元组: ()
  • 使用一个后缀的逗号来表示单元组: a,(a,)
  • 使用以逗号分隔的多个项: a, b, c or (a, b, c)
  • 使用内置的 tuple(): tuple()tuple(iterable)

请注意决定生成元组的其实是逗号而不是圆括号。 圆括号只是可选的,生成空元组或需要避免语法歧义的情况除外。 例如,f(a, b, c) 是在调用函数时附带三个参数,而 f((a, b, c)) 则是在调用函数时附带一个三元组。


range对象

range类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。

range 对象实现了通用序列操作,但拼接和重复除外。

range的构造方式:

class range(stop)
class range(start, stop[, step])

  • range 构造器的参数必须为整数。

  • start 默认为 0step 默认为 1

    • 如果 step 为正值,确定 range r 内容的公式为 r[i] = start + step*i 其中 i >= 0r[i] < stop
    • 如果 step 为负值,确定 range 内容的公式仍然为 r[i] = start + step*i,但限制条件改为 i >= 0r[i] > stop.
  • 如果 r[0] 不符合值的限制条件,则该 range 对象为空。

  • range 对象支持负索引,将其解读为从正索引所确定的序列的末尾开始索引。


字符串(String)

字符串是由 Unicode 码位构成的不可变序列。字符串实现了所有通用序列操作。

str的构造方式

  • 单引号: '允许包含有 "双" 引号'
  • 双引号: "允许嵌入 '单' 引号"
  • 三重引号: '''三重单引号''', """三重双引号"""(三重引号保留文本原始格式)
  • 禁止转义字符生效:r'\n不会转义', r"\t也不会转义"

由于不存在单独的“字符”类型,对字符串做索引操作将产生一个长度为 1 的字符串。 也就是说,对于一个非空字符串 s, s[0] == s[0:1]

字符串常用内置方法:

字符串全部方法: Python 文档:字符串的方法

查找类 方法说明
find() 查找元素是否在字符串中,若存在则返回下边(index),否则返回-1
index() 查找元素是否在字符串中,若存在则返回下标,否则报错
修改类 方法说明
replace() 替换内容
split() 切割字符串,默认以空格切割,返回一个列表
join() 将序列的内容以指定符号拼接
upper() 将字符串中的小写转大写
lower() 将字符串中的大写转小写
strip() 删除字符串两侧的空白字符
判断类 方法说明
isalpha() 如果字符串所有字符都是字母,返回True,否则返回False
isdigit() 如果字符串所有字符都是数字,返回True,否则返回False
isalnum() 如果字符串所有字符都是字母或数字,返回True,否则返回False

ref:
Python 文档:序列类型 - list, tuple, and range
Python 文档:可变序列类型
Python 文档:字符串的方法

热门相关:盛华   护花猎王   榴绽朱门   唐朝贵公子   总裁大人,又又又吻我了