第十章 集合 (Set)

第十章 集合 (Set)

  • 集合的基本观念是无序且每个元素是唯一的,集合元素的内容是不可变的,常见的元素有整数、浮点数、字符串、元组等。至于可变内容列表、字典、集合等不可以是集合元素。但是集合本身是可变的,我们可以增加或删除集合的元素。

10-1 建立集合 set()

  • python 可以使用大括号 “ { } ” 或 set() 函数建立集合,下列将分别说明。
10-1-1 使用大括号建立集合
  • python 允许我们直接使用大括号 “ { } ” 设定集合,例如,集合名称是 langs,内容是 ‘ Python ’ 、‘ C ’、‘ Java ’。可以使用下列方式设定集合。

  • 例:基本集合建立

    langs = {
         'Python','C','Java'}
    print('打印集合:',langs)
    print("打印类别:",type(langs))
    
    #输出结果
    打印集合: {
         'Python', 'C', 'Java'}
    打印类别: <class 'set'>
    
  • 集合的物色是元素是唯一的,所以如果设定集合时有重复元素情形,多的部分将被舍去。

  • 例:基本集合的建立,建立时部分元素重复,观察执行结果

    langs = {
         'Python','C','Python','Java','C'}
    print('打印集合:',langs)
    
    #输出结果
    打印集合: {
         'Python', 'C', 'Java'
    
  • 上述 ‘ Python ’ 和 ‘ C ’ 在设定时皆出现 2 次,但是列出时有重复的元素将只保留 1 份,集合内容可以是由不同数据类型组成,可参考下列实例。

  • 例:使用整数和不同数据类型所建的集合

    #集合由整数所组成
    integer_set = {
         1,2,3,4,5}
    print(integer_set)
    #集合由不同数据型态所组成
    mixed_set = {
         1,'Python',(2,5,10)}   #因为集合元素是不可变的,如果元组所为列表将出现错误
    print(mixed_set)
    
    #输出结果
    {
         1, 2, 3, 4, 5}
    {
         1, 'Python', (2, 5, 10)}
    
  • 读者可能会思考,字典是用大括号定义,集合也是用大括号定义,可否直接使用空的大括号定义空集合?可参考下列实例。

  • 例:建立空集合并观察执行结果,发现错误的实例

    x = {
         }
    print("打印    :",x)
    print("打印类别:",type(x))
    
    #输出结果
    打印    : {
         }
    打印类别: <class 'dict'>
    
  • 结果发现使用空的大括号 { } 定义,获得的是空字典,下一小节将会讲解定义空集合的方法。

10-1-2 使用 set() 函数定义集合
  • 除了以 10-1-1 节方式建立集合,也可以使用 set() 函数建立集合, set() 函数参数的内容可以是字符串、列表、元组等。这时原先字符串、列表、元组的元素将被转成集合元素。首先笔者回到建立空集合的主题,如果想建立空集合需使用 set() 函数。

  • 例:使用 set() 函数建立空集合

    empty_dict = {
         }
    print("打印类别:",type(empty_dict))
    empty_set = set()
    print("打印类别:",type(empty_set))
    
    #输出结果
    打印类别: <class 'dict'>
    打印类别: <class 'set'>
    
  • 例:使用字符串建立与打印集合,同时列出集合的数据类型。

    x = set("DeepStone mean Deep Learning")
    print(x)
    print(type(x))
    
    #输出结果
    {
         'g', 'o', 'm', 'e', 'D', 'p', 't', 'L', 'S', 'n', ' ', 'r', 'a', 'i'}
    <class 'set'>
    
  • 由于集合元素具有唯一的特性,所以虽然程序第 2 行原先字符串有许多字母(例如:e)重复,经过 set() 处理后,所有英文字母将没有重复。

  • 例:使用列表建立与打印集合

    #方式1
    fruits = ['apple','orange','apple','banana','orange']
    x = set(fruits)
    print(x)
    #方式2
    y = set(['apple','orange','apple','banana','orange'])
    print(y)
    
    #输出结果
    {
         'apple', 'orange', 'banana'}
    {
         'apple', 'orange', 'banana'}
    
  • 读者需留意 2 种不同的 set() 函数使用方式,同时原先列表内容已经变为集合元素内容了。

  • 例:使用元组建立与打印集合。

    cities = set(('Beijing','Tokyo','Beijing','Taipei','Tokyo'))
    print(cities)
    
    #输出结果
    {
         'Beijing', 'Tokyo', 'Taipei'}
    
10-1-3 大数据与集合的应用
  • 笔者的朋友在某知名企业工作,收集了海量数据使用列表保存,这里面有些数据重复出现,他曾经询问笔者应如何将重复数据删除,笔者告知如果使用 C 语言可能需花几小时解决,但是如果了解 Python 的集合观念,只要花约 1 分钟就解决了。其实只要将列表数据使用 set() 函数转为集合数据,再使用 list() 函数将集合数据转为列表数据就可以了。

  • 例:将列表内重复性的数据删除。

    fruits1 = ['apple','orange','apple','banana','orange']
    x = set(fruits1)
    fruits2 = list(x)
    print("原先表列数据 fruits1:",fruits1)
    print("新的列表数据 fruits2:",fruits2)
    
    #输出结果
    原先表列数据 fruits1: ['apple', 'orange', 'apple', 'banana', 'orange']
    新的列表数据 fruits2: ['apple', 'orange', 'banana']
    

10-2 集合的操作

Python 符号 说 明
& 交集
| 并集
- 差集
^ 对称差集
== 等于
!= 不等于
in 是成员
not in 不是成员
10-2-1 交集(intersection)
  • 有 A 和 B 两个集合,如果想得相同的元素,则可以使用交集。例如,有数学(可想成 A 集合)与物理(可想成 B 集合)2 个夏令营,如果想统计有哪些人同时参加这 2 个夏令营,则可以使用此功能。

  • 在 Python 语言的交集符号是 “ & ” ,另外,也可以使用 intersection() 方法完成这个工作。

  • 例:有数学与物理 2 个夏令营,这个程序会列出同时参加这 2 个夏令营的成员。

    math = {
         'Kevin','Peter','Eric'}      # 设定参加数学夏令营成员
    physics = {
         'Peter','Nelson','Tom'}   # 设定参加物理夏令营成员
    both = math & physics
    print("同时参加数学与物理夏令营的成员:",both)
    
    #输出结果
    同时参加数学与物理夏令营的成员: {
         'Peter'}
    
  • 例:使用 intersection() 方法完成交集的应用

    A = {
         1,2,3,4,5}
    B = {
         3,4,5,6,7}
    AB = A.intersection(B)
    print("A和B的交集是:",AB)
    BA = B.intersection(A)
    print("B和A的交集是:",BA)
    
    #输出结果
    A和B的交集是: {
         3, 4, 5}
    B和A的交集是: {
         3, 4, 5}
    
10-2-2 并集(union)
  • 有 A 和 B 两个集合,如果想获得所有的元素,则可以使用并集,例如,有数学(可想成 A 集合)与物理(可想成 B 集合)2 个夏令营,如果想统计参加这 2 个夏令营的全部成员,则可以使用 此功能

  • 在 Python 语言的并集符号是 " | ",另外,也可以使用 union() 方法完成这个工作。

  • 例:有数学与物理 2 个夏令营,这个程序会列出参加这 2 个夏令营的所有成员。

    math = {
         'Kevin','Peter','Eric'}      # 设定参加数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值