Python 中的 sequence 类型

发表时间 2021-06-12
阅读2分钟

Python 中的 sequence 类型是几种数据类型的总称。这些类型的共同点是集合中的元素是有序排列的。本文详细介绍 sequence 中各种类型的共同点。

概述

sequence 类型有 list 、 tuple 和 str 三类。

  • list 类型是最常见的 sequence 类型,对应了其他语言(比如javascript)中的 array 类型。
  • tuple 是 list 类型的 immutable版本
  • str 类型也是 immutable

list 类型介绍

list 的底层保存的是指向内容的引用。

变量保存的底层形式见这篇文章:Python 中的变量赋值

tuple 类型介绍

tuple 对象一经生成,其中的元素便不可更改。在Python 里 immutable和hashable的概念中有介绍。

str 类型介绍

字符串使用单引号或者双引号括起来的字符序列。也是immutable 的。如果三个连续的单引号或者双引号,则表示一个长字符串,其中的换行符(\n)无需转义。比如:

print("""This is a 
long string""")

sequence 类型的共同用法

下列的用法可以用于 sequence 的任一类型:

寻址

[i]

方括号用来表示寻址。 S[i] 返回 S 中第 i 个元素。

i 是负数,则表示从尾部开始,或者可以理解为坐标值 i加上序列长度的结果,意思是:

S[ i ] = S[ len(S)+i ] ,当 -len(S)<=i<0

比如:

>>> range(10)[-2]
8
>>> range(10)[10-2]
8
>>> range(10)[-3]
7
>>> range(10)[10-3]
7
>>> range(10)[-10]
0
>>> range(10)[10-10]
0

切片

[m:n:i]

寻址的高级用法是切片 Slicing 。 S[m:n:i] 返回 S 中第 m 个元素开始,每隔 i 个元素,直到 n-1 为止的子集。比如:

>>> range(10)[1:8:2]
[1, 3, 5, 7]
>>> 

若不提供 i ,则 i 默认为1

>>> range(10)[1:8]  
[1, 2, 3, 4, 5, 6, 7]
>>> 

若m或者n是负数,则按照 寻址 表示:

>>> range(10)[-8:-1]
[2, 3, 4, 5, 6, 7, 8]

若不提供m或者n中的一个,则表示从到尾部结束或者从头部开始:

>>> range(10)[4:]
[4, 5, 6, 7, 8, 9]
>>> range(10)[:4]
[0, 1, 2, 3]
>>>

若m和n均不提供,则表示一个原始 sequence 的复制品:

>>> range(10)[:] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

级联

+

sequence 的加法 “+” 被重载为级联动作:

>>> (1,2,3)+(4,5,6)
(1, 2, 3, 4, 5, 6)
>>> 

重复

*

sequence 的乘法 “*” 被重载为复制动作:

>>> "abc "*3
'abc abc abc '
>>>

判断成员身份

in

sequence 类型都支持 in 操作,以判断某个元素是否在集合内部。

>>> "c a" in ("abc "*3)
True
>>> 

sequence 类型支持的函数

元素个数

len()

len(S) 函数返回序列 S 的元素个数

元素的极值

min( ), max( )

min(S) 函数返回序列 S 的中最小元素, max(S) 函数返回序列 S 的中最大元素。

>>> min("ABC")
'A'
>>> max("aBC")
'a'
>>>

寻找元素

index( )

S.index(a) 法函数返回对象 S 的元素 a 第一次出现的位置,例如:

>>> "aaaa".index('a')
0
>>>

统计元素出现次数

count( )

S.count(a) 方法函数返回对象 S 的元素 a 出现的次数,例如:

>>> [[1],[1],[1]].count([1])
3
本站是个人博客。除非特别说明,所有文章均系原创,并采用 署名协议 CC-BY 授权。
欢迎转载,惟请保留原文链接:/tech/python-sequence/