Python自学之路四:数据类型-容器类型

在前面,我们讲了比较简单的基本数据类型,如果说把基本数据类型看作组成Python的原子,下面我们要说的容器类型就像是分子一样。这篇文章里,我们会把之前所学的基本数据类型以更复杂的方法组织起来,这些数据结构以后会经常用到。

在这篇文章中,你将学习到以下内容(点击直达)

一、列表(list)和元组(tuple)

列表就像这种收纳盒

  1. 创建列表:①直接使用方括号[],元素之间用逗号隔开;②使用list()函数创建一个空列表(即指明类型);
  2. 使用list()可以将其他数据类型转换成列表;
  3. 列表里的元素编号和字符的编号规则一样;
  4. 切片alist[start:end:step]
  5. 增长列表
    • append:添加元素到列表尾部:alist.append(element)
    • insert:在指定位置m插入元素:alist.insert(m,element)
    • extend:合并列表(或者用+=):alist.extend(blist)
  6. 缩减列表
    • remove:删除具有指定值的元素:alist.remove(element)
    • pop:获取并删除指定位置m的元素:alist.pop(m)注意:如果没有指定偏移量即alist.pop(),则会返回pop(-1)即列表尾元素
    • clear:删除全部元素:alist.clear()
    • del:删除指定位置m的元素:del alist[m]
  7. index:查询指定元素的位置:alist.index(element)
  8. in:判断元素是否存在,返回bool值:element in alist
  9. count:记录元素出现的次数:alist.count(element)
  10. join:将列表转换为字符串:' '.join(alist)
  11. sort:重新排列元素:alist.sort()。列表方法sort()会对原列表进行排序,改变原列表内容;通用函数sorted()则会返回排好序的列表副本,原列表不变。
  12. 使用len()可以获取列表长度。使用=赋值:改变列表则赋值的列表也会改变;使用copy()、list()、列表分片[:]复制:改变原列表不会改变被赋值的列表。
  13. 索引:可以通过alist[m]获取指定位置m对应的元素,可以对指定位置m的元素进行重新赋值,可以指定范围并使用切片提取元素。列表可以包含列表。
  14. sum函数:将列表中所有的数据元素累加;mix/max函数:返回列表中的最小值。
  15. 创建元组:①直接使用圆括号(),元素之间用逗号隔开;②使用tuple()函数创建;元组只能和列表一样合并、获取长度、索引(不可重新赋值)、切片、查找、计算,不可对元组进行修改。

在许多地方都可以用元组代替列表,但元组的方法函数与列表相比要少一些,因为元组无法修改。既然列表更加灵活,那为什么不在所有地方使用列表呢:

  • 元组占用的空间较小;
  • 不会意外修改元组的值;
  • 可以将元组用作字典的键;
  • 命名元组可以作为对象的替代;
  • 函数的参数是以元组形式传递的。

二、字典(dict)

字典就像是给数据贴上标签,就可以通过具有特定含义的名字或者别的记号来获取数据。字典容器中保存着一系列的key(标签)-value(数据值),通过键值key来索引元素value。

  1. 创建字典:①直接使用花括号{};②使用dict()将包含双值子序列的序列转换为字典,包括双值元组、双值列表、双字符的字符串组成的列表或元组等等。标签和数据值之间用冒号连接;
  2. 字典是可变类型,和列表一样可以添加、删除、替换元素;字典中的元素value没有顺序,可以是任意类型,甚至也可以是字典;字典的键值key可以是任意不可变类型(数值/字符串/元组)。注意:字典的键必须保证互不相同!
    例如:用元组来作为坐标,索引元素:
  3. update()方法,使用update()可以将一个字典的键值对复制到另一个字典中去;如果待添加的字典与待扩充的字典包含同样的键,新归入字典的值会取代原有的值;可以key=value的形式批量添加数据项来增长字典
  4. 缩减字典
    • del:删除具有指定键的元素;
    • pop:删除指定键的元素并返回数据值;
    • popitem:删除并返回任意一个元素;
    • clear:删除所有元素。
  5. in:使用in可以判断某一个键是否存在于一个字典中,返回bool值;
  6. get:也可以测试一个键是否存在于一个字典中,返回与键对应的值;若键不存在,如果指定了可选值,那么将会返回这个可选值;否则得到None(什么也不显示);
  7. 键索引dict[key]。可以获取字典中指定键的数据值,更新指定键对应的元素。如果字典中不包含指定的键,会产生一个异常,使用in或get方法提前测试可以避免这种情况的发生;
  8. keys():获取所有键;values():获取所有值;items():获取所有键值对;
  9. 和列表一样,可以使用=赋值,对原字典进行的修改会反映到所有被其赋值的变量名上;如果不想被一起修改,可以使用copy()将字典复制到一个新字典中。

三、集合

集合就像舍弃了值,仅剩下键的字典一样。键与键之间也不允许重复,是不重复元素的无序组合。

  1. 创建集合:{}或者set();
  2. 可以用set()创建空集;可以用set()从其它序列转换生成集合,重复的值会被丢弃注意:集合中不能加入可变类型数据!
  3. add:添加一个值;update:批量添加值;
  4. remove/discard:删除指定数据;pop:删除任意数据并返回值;clear:清空集合;
  5. in:判断元素是否属于集合;可以使用迭代循环for a in aset
  6. 合并及运算符
    • 交集:符号&或者集合函数intersection()
    • 并集|或者union()函数;
    • 差集(出现在第一个集合但不出现在第二个集合):字符-或者difference()
    • 异或集(仅在两个集合中出现一次):^或者symmetric_difference()
    • 使用<=或者issubset()可以判断一个集合是否是另一个集合的子集;
    • 使用<可以判断一个集合是否是另一个的真子集;
    • 超集(第二个集合的所有元素都出现在第一个集合中):可以使用>=或者issuperset()进行判断;
    • 真超集(第一个集合包含第二个集合的所有元素且还包含其他元素):可以使用>进行判断。
  7. 什么时候用集合?①快速去除重复的值;②判断元素是否在一组数据中,如果这些数据的次序不重要,使用集合可以获得比列表更好的性能。

四、建立大型数据结构

从最简单的布尔型、数字、字符串到现在的列表、元组、集合以及字典等数据结构,我们可以把这些内置的数据结构自由地组合成更大、更复杂的结构。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注