目录
13.1.1 理解集合类型
13.1.2 集合的类型名
13.1.3 集合的定义
13.1.4 在循环中遍历集合
13.1.5 集合的元素输出顺序
13.1.6 知识要点
13.1.7 系统学习python
13.1.1 理解集合类型
集合类型与字典类型非常接近,Python中的集合类型也是用{}符号括住的一个数据集合,集合中的元素以英文逗号进行分隔。
集合与字典一样,底层实现基于哈希表:
# 定义一个集合变量stars
stars = {"陈法蓉", "陈德蓉"}
在上文代码中定义了一个集合类型变量stars, 在stars中包含两个元素,集合中的元素相当于字典中的键名,也就是说,Python中的集合类型是键名的数据集合。既然Python中的集合是键名的数据集合,那么集合中的元素必须是静态的、可哈希的数据类型,我们可以在交互模式中进行验证:
>>> stars ={"陈法蓉", "陈德容", ["李嘉欣"]}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
由输出可知,在定义集合类型的变量时,由于元素中包含可变的数据类型(列表),Python解释器抛出了类型错误的异常信息。
13.1.2 集合的类型名
在交互模式中通过type来输出集合的类型名:
>>> stars = {"陈法蓉", "陈德蓉"}
>>> type(stars)
<class 'set'>
从输出可知,字典的类型名为set。集合中的键名同样是唯一的,对列表进行显式类型转换以后,可以自动去掉重复的元素:
# __desc__ = 使用集合类型进行显式转换,对列表中的元素进行去重
# 在列表中可以包含重复的元素
stars = ["陈法蓉", "陈德蓉", "陈法蓉", "陈德蓉"]
stars = set(stars)
# stars的输出为{'陈德容', '陈法蓉'}
13.1.3 集合的定义
对集合进行定义,主要有对象定义法和直接定义法。
(1) 对象定义法
集合的类型名是set,可以直接在交互模式中执行help(set)来查找set的定义及用法:
class set(object)
| set() -> new empty set object
| set(iterable) -> new set object
|
| Build an unordered collection of unique elements.
从交互模式的输出中,可看到如下两个定义集合的构造方法:
(1) set()
(2) set(iterable)
1.set()
使用set()构造一个空的集合。
代码实例:
# __desc__ = 通过set()构造一个空的集合
# 定义一个空的集合
stars = set()
# 空值在条件判断中会自动转换为布尔类型False
if stars:
print("there are stars in stars")
else:
print("there is no star in stars")
2. set(iterable)
这里的iterable表示的是可迭代对象,可迭代对象中的元素必须是不可变的数据类型,否则会抛出类型错误的异常信息。迄今为止学过的可迭代对象:字符串,列表,元组,字典,集合
代码实例:
# __desc__ = 通过可迭代对象来构造集合
# 1.通过字符串类型来构造集合
alphabet = set("abcdefg")
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
# 2.通过列表类型来构造集合
alphabet = set(['e', 'c', 'b', 'a', 'g', 'd', 'f'])
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
# 3.通过元组类型来构造集合
alphabet = set(('e', 'c', 'b', 'a', 'g', 'd', 'f'))
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
# 4.通过字典类型来构造集合
alphabet = set({'e': 1, 'c': 1, 'b': 1, 'a': 1, 'g': 1, 'd': 1, 'f': 1})
# 使用字典类型进行构造时,以字典中的键名作为集合的键名
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
# 5.通过集合类型来构造集合
alphabet = set({'e', 'c', 'b', 'a', 'g', 'd', 'f'})
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
可迭代对象中的元素必须是不可变的数据类型,否则会抛出类型错误的异常信息:
>>> stars = ["陈法蓉", "陈德容", ["陈法蓉", "陈德容"]]
>>> stars = set(stars)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
简单数据类型,字符串,元组都是不可变的数据类型,列表,字典,集合等是可变的数据类型。
(2) 直接定义法
直接定义法是指直接通过集合的别名符号{}来进行定义。在{}中,键名以英文逗号进行分隔。
代码实例:
# __desc__ = 直接通过{}来构造集合
# 不能使用{}来构造一个空的集合,Python解释器会将其解析为字典类型
stars = {}
# stars是一个空的字典
# 构造一个有值的集合
stars = {"陈法蓉", "陈德蓉"}
13.1.4 在循环中遍历集合
集合是一种可迭代对象,可以在for循环中遍历集合的键名。
遍历集合的for循环结构:
for name in set:
pass
代码实例:
# __desc__ = 在for循环中遍历集合的键名
# 构造一个有值的集合
stars = {"陈法蓉", "陈德蓉"}
for star in stars:
print(star)
13.1.5 集合的元素输出顺序
Python3.6以前,字典中的键的输出顺序是无序的,在3.6以后,键的输出顺序与元素的插入顺序一致。但集合的键的输出顺序仍是无序的。
代码实例:
# __desc__ = 集合的键的输出顺序是无序的
alphabet = set("abcdefg")
# alphabet的输出可能为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
# 从输出顺序可以看出,与元素本来的排列顺序并不一致
Python中的集合同样是基于哈希表进行实现,键的输出顺序取决于底层的数据结构。
13.1.6 知识要点
(1)Python中的集合类型是用{}符号括住的一个数据集合,集合中的元素以英文逗号进行分隔。
(2)集合中的元素,相当于字典中的键名,元素类型必须是静态的数据类型。
(3)集合的类型名是set,可通过对象定义法和直接定义法来定义字典
(4)集合也是一种可迭代对象,可以在for循环中直接遍历出集合的键名
13.1.7 系统学习python
薯条老师简介:资深技术专家,技术作家,著有《Python零基础入门指南》,《Java零基础入门指南》等技术教程。薯条老师的博客:http://www.chipscoco.com, 系统学习后端,爬虫,数据分析,机器学习、量化投资。