[Python工匠]输出③容器类型

 在Python中,最常见的内置容器类型有四种:列表、元组、字典、集合。

列表(list)是一种非常经典的容器类型,通常用来存放多个同类对象,比如从1到10的所有整数:

 元组(tuple)和列表非常类似,但跟列表不同,它不能被修改。这意味着元组完成初始化后就没法再改动了:

[Python工匠]输出③容器类型_第1张图片

字典(dict)类型存放的是一个个键值对(key: value)。它功能强大,应用广泛,就连Python内部也大量使用,比如每个类实例的所有属性,就都存放在一个名为dict的字典里: 

[Python工匠]输出③容器类型_第2张图片

集合(set)也是一种常用的容器类型。它最大的特点是成员不能重复,所以经常用来去重(剔除重复元素): 

[Python工匠]输出③容器类型_第3张图片

3.1 基础知识 

 3.1.1 列表常用操作

列表是一种有序的可变容器类型,是日常编程中最常用的类型之一。常用的列表创建方式有两种:字面量语法与list()内置函数。

使用[]符号来创建一个列表字面量:

[Python工匠]输出③容器类型_第4张图片

[Python工匠]输出③容器类型_第5张图片

 [Python工匠]输出③容器类型_第6张图片

 3.1.2 理解列表的可变性

Python里的内置数据类型,大致上可分为可变与不可变两种。

· 可变(mutable):列表、字典、集合。

· 不可变(immutable):整数、浮点数、字符串、字节串、元组。

列表是可变的。当我们初始化一个列表后,仍然可以调用.append()、.extend()等方法来修改它的内容。而字符串和整数等都是不可变的——我们没法修改一个已经存在的字符串对象。

示例一:为字符串追加内容

[Python工匠]输出③容器类型_第7张图片

 示例二:为列表追加内容

[Python工匠]输出③容器类型_第8张图片

 示例解释

[Python工匠]输出③容器类型_第9张图片

 [Python工匠]输出③容器类型_第10张图片

[Python工匠]输出③容器类型_第11张图片

 [Python工匠]输出③容器类型_第12张图片

 3.1.3 常用元组操作

元组是一种有序的不可变容器类型。它看起来和列表非常像,只是标识符从中括号[]变成了圆括号()。由于元组不可变,所以它也没有列表那一堆内置方法,比如.append()、.extend()等。

[Python工匠]输出③容器类型_第13张图片

[Python工匠]输出③容器类型_第14张图片

 [Python工匠]输出③容器类型_第15张图片

 [Python工匠]输出③容器类型_第16张图片

3.1.4 具名元组 

[Python工匠]输出③容器类型_第17张图片

[Python工匠]输出③容器类型_第18张图片 [Python工匠]输出③容器类型_第19张图片

 3.1.5 字典常用操作

 跟列表和元组比起来,字典是一种更为复杂的容器结构。它所存储的内容不再是单一维度的线性序列,而是多维度的key: value键值对。

[Python工匠]输出③容器类型_第20张图片

 01.遍历字典

[Python工匠]输出③容器类型_第21张图片 

02.访问不存在的字典键


当用不存在的键访问字典内容时,程序会抛出KeyError异常,我们通常称之为程序里的边界情况(edge case)。针对这种边界情况,比较常见的处理方式有两种:
(1)读取内容前先做一次条件判断,只有判断通过的情况下才继续执行其他操作;

(2)直接操作,但是捕获KeyError异常。

[Python工匠]输出③容器类型_第22张图片

 

[Python工匠]输出③容器类型_第23张图片 

 [Python工匠]输出③容器类型_第24张图片

 

3.1.6 认识字典的有序性与无序性

在Python 3.6版本以前,几乎所有开发者都遵从一条常识:“Python的字典是无序的。”这里的无序指的是:当你按照某种顺序把内容存进字典后,就永远没法按照原顺序把它取出来了。

3.1.7 集合常用操作

集合是一种无序的可变容器类型,它最大的特点就是成员不能重复。集合字面量的语法和字典很像,都是使用大括号包裹,但集合里装的是一维的值{value, ...},而不是键值对{key: value, ...}。

[Python工匠]输出③容器类型_第25张图片 

[Python工匠]输出③容器类型_第26张图片 

 

 

3.1.8 了解对象的可哈希性

 在介绍字典类型时,我们说过字典底层使用了哈希表数据结构,其实集合也一样。当我们把某个对象放进集合或者作为字典的键使用时,解释器都需要对该对象进行一次哈希运算,得到哈希值,然后再进行后面的操作。这个计算哈希值的过程,是通过调用内置函数hash(obj)完成的。如果对象是可哈希的,hash函数会返回一个整型结果,否则将会报TypeError错误。因此,要把某个对象放进集合,那它就必须是“可哈希”的。话说到这里,到底哪些类型是可哈希的?哪些又是不可哈希的呢?我们来试试看。

[Python工匠]输出③容器类型_第27张图片

 [Python工匠]输出③容器类型_第28张图片

总结一下,某种类型是否可哈希遵循下面的规则:(1)所有的不可变内置类型,都是可哈希的,比如str、int、tuple、frozenset等;(2)所有的可变内置类型,都是不可哈希的,比如dict、list等;(3)对于不可变容器类型(tuple, frozenset),仅当它的所有成员都不可变时,它自身才是可哈希的;(4)用户定义的类型默认都是可哈希的。谨记,只有可哈希的对象,才能放进集合或作为字典的键使用。

 3.1.9 深拷贝与浅拷贝

[Python工匠]输出③容器类型_第29张图片

[Python工匠]输出③容器类型_第30张图片 [Python工匠]输出③容器类型_第31张图片

[Python工匠]输出③容器类型_第32张图片 [Python工匠]输出③容器类型_第33张图片

你可能感兴趣的:(Python,python,开发语言)