在计算机编程中,序列是指一种有序的数据集合,其中的元素按照顺序排列,并且可以通过索引访问每个元素。
python中的序列
- 列表(list):有序的集合,使用中括号创建。如[1,2,3]、[‘a’, ‘b’, ‘c’]等
- 元组(tuple):类似列表但不可变,使用圆括号创建。如(1,2,3)、(‘a’, ‘b’, ‘c’)等
- 字符串(str):用单引号or双引号括起来的文本数据。
- 范围(range):一个用于表示数字范围的不可变序列类型。有三个参数:起始值(在范围内)、结束值(不在范围内)、步长。’range’对象在内存使用中是非常高效的,因为它不会在内存中保存完整的范围数据,而是根据需要按需生成所需的数字。所以特别适合用于循环迭代场景。
- 字节数组(bytearray):一种数据类型,可变。其中元素是一个个的字节,每个字节的取值范围是0-255
- 字典(dict):表示键值对的集合,使用大括号创建。如{‘a’:1, ‘b’:2, ‘c’:3}
python序列的分类
-
按可存放数据类型种类分类
- 容器序列:可以存放不同类型的数据且存放的是其包含的任意类型的对象的引用。如list、tuple和collections.deque(双端队列)等
- 扁平序列:只能容纳一种类型,存放的是值而不是引用,故扁平序列其实是一段连续的内存空间。如str、bytes(字节串)、bytearray、memoryview(访问内存数据的内置类)和array.array(创建可变序列的一个模块)等
-
按能否被修改分类
- 可变序列(MutableSequence):list、bytearray、array.array、collections.deque和memoryview。
- 不可变序列(Sequence):tuple、str和bytes。
python序列的操作
Python使用统一的风格去处理序列数据。不管是哪种数据结构,字符串、列表、字节序列、数组、XML元素甚至是数据库的查询结果,它们都共有一套丰富的操作。以列表my_sequence= [1,2,3,4,5]为例
-
索引和切片:
my_sequence[0] -> 1; my_sequence[1:3] -> [2,3]
📢 切片不会修改原序列; 索引负数代表倒数第n个元素
切片的操作举例:
给定一个整数数组 `nums`,将数组中的元素向右轮转 `k` 个位置,其中 `k` 是非负数。
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
def rotate(nums, k):
n = len(nums)
k %= n
# nums[-k:]:表示倒数第k个元素到最后一个元素的切片
# nums[:-k]:表示第一个元素到倒数第k个元素的切片(不包括第k个元素)
nums[:] = nums[-k:] + nums[:-k]
- 迭代:可以循环迭代序列中元素。
for item in my_sequence
- 拼接:可以使用+运算符将两个序列组合起来。注:不同类型的序列如需拼接,需先转换类型。
- 重复:可以使用*运算符将序列重复多次。
my_sequence*3
- 成员关系:检查序列是否包含或不包含某元素。
if 2 in my_sequence / if 0 not in my_sequence
- 长度:可以使用len()函数获取序列的长度。
len(my_sequence)
- 排序:可以使用sorted()对序列进行排序,返回一个新的已排序序列。
sorted(my_sequence)
注:所有序列都共有这一套丰富的操作!