数据结构类型是指用来存储数据、文字、字符、二进制、类对象,进一步方便操作查找存储内容的结构。数据类型分为了序列类型、集合类型、映射类型。
序列类型是Python数据类型的内置基本数据类型,有三种基本序列类型:list,tuple和range。同样,序列类型分为通用序列类型、可变类型和不可变类型。
集合类型是指由具有唯一性的hashable对象锁组成的无序多项集。无序多项集与序列类型不同,作为无序的集合并不支持记录元素的位置和插入顺序,相应地集合也不支持索引、切片或其他序列类的操作。目前有两种集合类型:set和frozenset。
映射类型会将hashable值映射到任意对象,映射属于可变对象,目前只有一种标准映射类型对象:dic。
序列类型-list,tupe,range
序列类型有通用序列,可变序列和不可变序列。序列支持一系列的操作。
通用序列操作支持
通用序列支持的操作可变序列和不可变序列都支持,下面是通用序列的支持操作:
备注:表格中s和t是具有相同类型的序列,n, i, j 和 k 是整数,x 是任何满足 s 所规定的类型和值限制的任意对象,序列的操作同样具有优先级顺序,表格是按照优先级降序排列(not in 和 in 优先级相同)
运算 | 释义 |
---|---|
s.count(x) | x在s中出现的总次数 |
s.index(x,i,j) | x在s中首次出现项的索引号(索引号在i或其后且在j之前) |
max(s) | s的最大项 |
min(s) | s的最小项 |
len(s) | s的长度 |
s[i:j:k] | s从i到j步长为k的切片 |
s[i:j] | s从i到j的切片 |
s[i] | s的第i项 |
sn 或n\s | 相当于s与自身进行n次拼接 |
s+t | s与t两个序列进行拼接 |
x not in s | 如果x不存在于s项中,则返回True,如果存在于s中,则返回False |
x in s | 如果x存在于s中,则返回True,如果不存在于s中,则返回True |
想同类型的序列支持比较,tuple和list的比较是通过比较对应元素的顺序,若比较结果相同,则每个元素比较结构都必须相等,并且两个序列长度必须相同。
可变序列操作支持
通用序列的操作在可变序列中适用,但可变序列也有部分自己的支持操作,可变序列的操作如下表所示:
备注:s是可变序列类型的实例,t是任意可迭代对象, x 是符合对 s 所规定类型与值限制的任何对象
操作 | 释义 |
---|---|
s[i] =x | 将s的第i项替换为x |
s[i:j] = t | 将s从i到j的切片替换为可迭代对象t的内容 |
del s[i:j] | 删除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[i:j:k] = [] |
s.append(x) | 将x添加到序列的末尾 |
s.clear() | 将s中的所有项移除 等同于del s[:] |
s.copy() | 创建s的浅拷贝 |
s.extend(t)或 s+=t | 用 t 的内容扩展 s 两个序列的合并 |
s*=n | shiyongs的内容重复n次来对其进行更新 |
s.insert(i,x) | 在由 i 给出的索引位置将 x 插入 s (等同于 s[i:i] = [x] ) |
s.pop(i) | 提取在i位置上的序列项,并从s中移除该项 |
s.remove(x) | 若x在s中存在,则将s[i] (s[i]==x)的第一个元素移除 |
s.reverse() | 将列表中的元素逆序 |
list - 列表
列表是可变序列,通常用于存放同类项目的集合(其中精确的相似程度将根据应用而变化)。
list构建 以及list方法
列表的构建有多种方式
-
使用一对方括号来表示空列表:
[]
-
使用方括号构建,列表中的项以逗号分割:[a,b,c]
-
使用列表推导式: [x for x in iterable]
-
使用类型构造器: list() 或list(iterable)。构造器将构造一个列表,其中的项与 iterable 中的项具有相同的的值与顺序。 iterable 可以是序列、支持迭代的容器或其它可迭代对象。 如果 iterable 已经是一个列表,将创建并返回其副本,类似于
iterable[:]
。 例如,list('abc')
返回['a', 'b', 'c']
而list( (1, 2, 3) )
返回[1, 2, 3]
。 如果没有给出参数,构造器将创建一个空列表[]
。 -
其它操作,例如sorted()内置函数,分类后会产生一个列表。
列表作为序列类型,实现了所有通用序列和可变序列的操作,如下:
| 列表实现的序列操作 | 释 |
| —————————– | ———————————————————— |
| list.append(x) | 在列表的末尾添加一个元素。 |
| list.extend(iterable) | 使用可迭代对象中的所有元素来扩展列表 |
| list.insert(i,x) | 在给定的位置插入一个元素。第一个参数是要插入的元素的索引,所以a.insert(0, x)
插入列表头部,a.insert(len(a), x)
等同于a.append(x)
|
| list.remove(x) | 若x在列表中存在,则将列表中的项的值为x的第一个元素移除 |
| list.pop(i) | 删除列表中给定位置的元素并返回它。如果没有给定位置,a.pop()
将会删除并返回列表中的最后一个元素。 |
| list.clear() | 删除列表中所有的元素 |
| list.index(x, start, end) | 返回x出现的第一个索引位置ÿ