Python基本数据类型-list-tuple-dict-set
数据类型 | 表示方法 | 特性 |
---|
list | 列表用方括号表示:[] | list是一种有序的集合,可以随时添加和删除其中的元素。和C++数组的区别就是类型可不同。 |
tuple | 元组用圆括号表示:() | 和list相比唯一的差异在于元组是只读的,不能修改。 |
dict | 字典用花括号表示:{} | 列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 |
set | set() | 集合是一个无序不重复元素集,基本功能包括关系测试和消除重复元素 |
列表list
初始化列表
指定元素初始化列表
从字符串初始化列表
从元组初始化列表
创建一个空列表
用某个固定值初始化列表
访问列表
访问单个元素
遍历整个列表
输出结果:0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
列表操作
更新列表
删除列表元素
输出结果:0 1 2 3 4 5 6 7 [0, 1, 3, 4, 5, 6, 7]
列表操作符+*
列表对+和的操作符与字符串相似。+号用于组合列表,号用于重复列表。
以下为+操作符
以下为*操作符
列表函数
以下是列表相关函数的分类
xmind文件可点这里下载
以下是help(list)
的结果中关于重点函数的介绍部分
元组tuple
Python的元组与列表类似,不同之处在于元组的元素不能修改;元组使用小括号(),列表使用方括号[];元组创建很简单,只需要在括号中添加元素,并使用逗号(,)隔开即可。
元组初始化
元组函数
关于tuple相关的函数可以使用help命令获得。
list和index方法的使用和list一模一样。
命名元组
Python有一个类似tuple的容器namedtuples(命名元组),位于collection模块中。namedtuple是继承自tuple的子类,可创建一个和tuple类似的对象,而且对象拥有可访问的属性。
在c/c++中,对应的数据类型是结构体struct。
这样就声明了一个新的结构体类型Point,有了类型就可以定义结构体的变量了。
在c/c++中结构体的最大作用在于组织数据,也就是对数据的封装(可以把结构体理解为特殊的类)。在python中起相同作用的就是命名元组了。命名元祖的具体使用如下
命名元祖的具体使用可以参见:namedtuple()
以及python 命名元组
字典dict
字典相关的所有内容如下
xmind文件可点这里下载
可以发现,dict是python內建的类,是一种key-value结构
字典(dictionary)是除列表之外python中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
每个键与值必须用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。键必须独一无二,但值则不必;值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。
字典初始化
增加
d[key] = value
,update
删除
- pop 用于从字典删除一个key, 并返回其value,当删除不存在的key的时候, 会抛出KeyError。当删除不存在的key, 并且指定了默认值时, 不会抛出KeyError, 会返回默认值
- popitem 随机 返回并删除一个kv对的二元组
- clear 清空一个字典
- del语句
访问
单个元素的访问
字典的遍历
直接for in
遍历
直接用for in 遍历字典, 遍历的是字典的key
keys
函数遍历
- d.keys() # keys 方法返回一个可迭代对象, 元素是字典所有的key
- d.keys() -> dict_keys([‘d’, ‘a’, ‘c’, ‘r’, ‘p’])
values
函数遍历
- d.values() # values 方法返回一个可迭代对象,元素是字典所有的value
- d.values() -> dict_values([2, ‘default’, 3, 2, 0])
items
函数遍历
- d.items() # items 方法返回一个可迭代对象, 元素是字典的所有(k, v)对
- d.items() -> dict_items([(‘d’, 2), (‘a’, ‘default’), (‘c’, 3), (‘r’, 2), (‘p’, 0)])
输出如下
另外一种方式:解析(k,v)对
输出如下
keys, values, items 返回的都类似生成器的对象, 它并不会复制一份内存
Python2对应的函数返回的是列表, 会复制一份内存
字典的限制
默认字典
默认字典是defaultdict
default初始化的时候, 需要传入一个工厂函数, 具体的介绍可以使用help(defaultdict)来查看,当我们使用下标访问一个key的时候, 如果这个key不存在, defaultdict会自动调用初始化时传入的函数, 生成一个对象作为这个key的value。因此上面的list函数初始化的时候就生成了一个空列表。
以下是使用dict和defaultdict的对比
如果这段代码使用defaultdict来写
有序字典
有序字典是OrderedDict(第一个字母大写)
有序字典会保持插入的顺序
集合set
集合相关的所有内容如下
xmind文件可点这里下载
详细使用可以参考:https://blog.csdn.net/business122/article/details/7541486
下面是一个小例子:
定义与初始化
增加
增加函数有两个add
和update
add
是增加单个元素,和列表的append操作类似,是原地修改
update
是增加一个可迭代对象,和列表的extend操作类似,是原地修改
两个函数对于已经存在的元素会什么也不做
删除
- remove 删除给定的元素, 元素不存在抛出KeyError(需要抛出异常时使用此函数)
- discard 删除给定的元素, 元素不存在,什么也不做(和remove的唯一区别)
- pop 随机arbitrary删除一个元素并返回, 集合为空,抛出KeyError
- clear 清空集合
修改
集合不能修改单个元素
###查找
集合不能通过索引
集合没有访问单个元素的方法
集合不是线性结构, 集合元素没有顺序
集合的pop操作的随机性可以证明集合不是线性结构的。
成员运算符
用于判断一个元素是否在容器中
集合的成员运算和其他线性结构的时间复杂度不同
由以上可见,做成员运算的时候 集合的效率远高于列表。
做成员运算时 列表的效率和列表的规模有关,而集合的效率和集合的规模无关。
成员运算:
集合运算
集合运算主要有:交集,差集,对称差集,并集
python中的集合运算都对应两个版本,一个默认版本(返回新的集合),一个update版本(会更新集合本身)。
交集
intersection
交集的特性:满足交换律,重载了&
运算符
差集
difference
差集特性:不满足交换律,重载了-
运算符
####对称差集
symmetric_difference
对称差集特性:满足交换律,重载了^
运算符
并集
union
,update
并集特性:满足交换律,重载了|
运算符
集合相关的判断
issuperset
,issubset
isdisjoint
:判断是否两个集合是否不相交(disjoint),有交集则返回False,没有交集则返回True
集合的限制
集合的元素不能是可变的,集合的元素必须可hash
参考资料
Python集合(set)类型的操作
python数据类型详解
Python中的List,Tuple和Dictionary