在 Python 中,序列(Sequence)是指“有序的元素集合“。(说白了就是把一堆东西按顺序排好队。)

序列的主要特点:

  1. 有序性:序列中元素挨个放,谁在前谁在后,位置是固定的。
  2. 索引访问:可以通过索引(从0开始)来访问序列中的任意元素。
  3. 切片操作:支持通过切片语法获取子序列。(就像切面包,可以切出其中一段来用。)
  4. 可迭代:可以用循环一个一个地处理里面的元素。

主要序列类型一览:

序列类型

可变性

说明

典型字面量

列表 (List)

✅ 可变

最灵活的序列,可以存放不同类型的数据

[1, 'a', 3.14]

元组 (Tuple)

❌ 不可变

类似列表,但一旦创建就不能修改,常用于固定数据

(1, 2, 3)

字符串 (String)

❌ 不可变

由字符组成的序列

"Hello"

范围 (Range)

❌ 不可变

用于生成连续的整数序列,常用于循环

range(5)

字节串 (Bytes)

❌ 不可变

由 0-255 之间的整数组成的不可变序列,用于处理二进制数据,比如图片、文件内容

b'hello'

字节数组 (Bytearray)

✅ 可变

Bytes的可修改版本

bytearray(b'hello')

一句话总结:列表最灵活,元组和字符串是“只读”的,range专门用来数数,bytes和bytearray是处理二进制数据的。


🧐 详细解读:这几种序列有什么区别?

我们可以根据两个核心维度来理解它们:能不能变 和 存的是什么。

1. 按“可变性”分类

这是最常用的分类方式,决定了你能不能对它进行“增删改”操作。

可变序列(Mutable)

列表 (List):这是 Python 中最强大的序列。你可以随时往里面添加元素(.append())、删除元素(.remove())或者修改某个位置的值。它就像是一个可伸缩的收纳盒。

字节数组 (Bytearray):如果你需要处理二进制数据(比如文件读写),并且需要修改其中的内容,就会用到它。

不可变序列(Immutable)

元组 (Tuple):它像是一个“冻结”的列表。定义好之后,你不能增加、删除或修改里面的元素。这使得元组可以作为字典的键(Key),或者用于保护数据不被意外修改。

字符串 (String) & 字节串 (Bytes):正如我们之前讨论的,它们一旦创建就不能改变。任何看似“修改”的操作(如拼接),实际上都是在内存里新建了一个对象。

范围 (Range):它代表一个数学上的整数区间(比如 0 到 9),这个区间本身是固定的。

2. 按“存储内容”分类
  • 容器序列 (Container):

如 列表 和 元组。

  • 它们可以存放不同类型的数据(比如一个列表里既有数字又有字符串,甚至嵌套另一个列表)。
  • 它们存储的是对象的引用。

示例代码:

# 创建一个可变对象(列表)
shared_data = [1, 2, 3]

# 两个不同的容器都存储对同一个对象的引用
list_a = [shared_data, "first"]
list_b = [shared_data, "second"]

print("修改前:")
print("list_a:", list_a)  # [[1, 2, 3], 'first']
print("list_b:", list_b)  # [[1, 2, 3], 'second']

# 通过任何一个容器修改共享的对象
list_a[0].append(4)  # 修改的是 shared_data 对象

print("\n通过list_a修改共享对象后:")
print("list_a:", list_a)  # [[1, 2, 3, 4], 'first']
print("list_b:", list_b)  # [[1, 2, 3, 4], 'second']

# 可以看到两个容器都被影响了,因为它们都引用同一个对象

也就是a1变换的话,a2也变,因为引用的都是同一个。

  • 扁平序列 (Flat):

如 字符串、字节串、字节数组、数组 (array.array)。

  • 它们只能容纳一种类型(如全是字符、全是字节或全是数字)。
  • 它们在内存中是一段连续的空间,存储的是具体的值,因此在处理大量数值数据时,比列表更节省内存且高效。

💡 总结建议

如果你需要:

  • 随时增删改的数据集合,用 列表 (list)。
  • 固定不变的数据(比如坐标 (x, y)),用 元组 (tuple)。
  • 处理文本,用 字符串 (str)。
  • 文件或网络传输的二进制数据,用 bytes 或 bytearray。
  • for 循环中生成一串数字,用 range。

这些序列类型虽然形态各异,但都遵循“索引”、“切片”、“求长度(len())”等通用规则,掌握一个就能触类旁通!❤

(我们后续逐个介绍不同序列类型的操作——增删改查。)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐