【蟒蛇】9、数据容器之集合-学Python黑马程序员个人笔记

  1. 参考视频
  2. 集合的定义和操作
  3. 集合的定义和操作案例

参考视频

黑马程序员python教程,8天python从入门到精通

集合的定义和操作

# 通过特性分析
# 列表可修改,支持重复元素且有序
# 元组、字符不可修改、支持重复元素且有序
# 局限在于他们支持重复元素,如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。
# 集合最主要特点:不支持元素的重复(自带去重功能),并且内容无限

# 定义集合
my_set = {'传智教育', '黑马程序员', 'itheima', '传智教育', '黑马程序员', 'itheima', '传智教育', '黑马程序员', 'itheima'}
my_set_empty = set()
print(f'my_set的内容是:{my_set},类型是:{type(my_set)}')
print(f'my_set的内容是:{my_set_empty},类型是:{type(my_set_empty)}')
"""
my_set的内容是:{'传智教育', '黑马程序员', 'itheima'},类型是:<class 'set'>
my_set的内容是:set(),类型是:<class 'set'>
"""

# 因为集合无序,所以集合不支持:下标索引访问,但和列表一样,允许修改。
# 添加新元素
my_set.add('Python')
my_set.add('传智教育')
print(f'my_set添加元素后结果是:{my_set}')
"""
my_set添加元素后结果是:{'传智教育', 'itheima', '黑马程序员', 'Python'}
"""
# 还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:
this_set = set(("Google", "noob", "Taobao"))
this_set.update({1, 3})
print(this_set)  # {1, 3, 'noob', 'Google', 'Taobao'}

this_set.update([1, 4], [5, 6])
print(this_set)  # {1, 3, 4, 5, 'noob', 6, 'Google', 'Taobao'}

# 移除元素,如果元素不存在,会发生错误
my_set.remove('黑马程序员')
print(f'my_set移除元素后结果是:{my_set}')
my_set.remove('haha')
print(my_set)  # KeyError: 'haha'
# 此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。
this_set = {"Google", "noob", "Taobao"}
this_set.discard("Facebook")  # 不存在不会发生错误
print(this_set)  # {'Taobao', 'Google', 'noob'}

# 随机取出一个元素
my_set = {'传智教育', '黑马程序员', 'itheima'}
element = my_set.pop()
print(f'my_set被取出元素是:{element},取出元素后{my_set}')

# 清空集合,clear
my_set.clear()
print(f'集合被清空结果是:{my_set}')
"""
集合被清空结果是:set()
"""

# 取出2个集合的差集
# 语法:集合1.difference(集合2),功能:取出集合1和集合2的差集(集合1有而集合2没有的)
# 结果得到一个新集合,集合1和集合2不变
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference(set2)
print(f'取出差集后的结果是:{set3}')
print(f'取出差集后,原有set1的内容是:{set1}')
print(f'取出差集后,原有set2的内容是:{set2}')
"""
取出差集后的结果是:{2, 3}
取出差集后,原有set1的内容是:{1, 2, 3}
取出差集后,原有set2的内容是:{1, 5, 6}
"""

# 消除差集,集合1.difference_update(集合2)
# 功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素
# 结果:集合1被修改,集合2不变
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set1.difference_update(set2)
print(f'消除差集后,原有set1的结果是:{set1}')
print(f'消除差集后,原有set2的结果是:{set2}')
"""
消除差集后,原有set1的结果是:{2, 3}
消除差集后,原有set2的结果是:{1, 5, 6}
"""

# 2个集合合并
# 语法:集合1.union(集合2)
# 功能:将集合1和集合2结合成新集合
# 结果:得到新集合,集合1和集合2不变
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.union(set2)
print(f'2集合合并后结果是:{set3}')
print(f'合并后集合1结果是:{set1}')
print(f'合并后集合2结果是:{set2}')
"""
2集合合并后结果是:{1, 2, 3, 5, 6}
合并后集合1结果是:{1, 2, 3}
合并后集合2结果是:{1, 5, 6}
"""

# 统计集合元素数量(去重后)
set1 = {1, 2, 3, 5, 6, 1, 2, 3, 5}
num = len(set1)
print(f'集合中的元素数量:{num}个')
"""
集合中的元素数量:5个
"""

# 集合的遍历,集合不支持下标索引,不可以用while循环,但可以用for
set1 = {1, 2, 3, 5, 6}
for element in set1:
    print(f'集合的元素有:{element}')
"""
集合的元素有:1
集合的元素有:2
集合的元素有:3
集合的元素有:5
集合的元素有:6
"""

"""
以下来源菜鸟教程
"""
# Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。
# 集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。
# 在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。
# 另外,也可以使用 set() 函数创建集合。
# 注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

set1 = {1, 2, 3, 4}        # 直接使用大括号创建集合
set2 = set([4, 5, 6, 7])   # 使用 set() 函数从列表创建集合
print(set1)  # {1, 2, 3, 4}
print(set2)  # {4, 5, 6, 7}

# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')

print(a)

print(b)

# a 和 b 的差集
print(a - b)

# a 和 b 的并集
print(a | b)

# a 和 b 的交集
print(a & b)

# a 和 b 中不同时存在的元素
print(a ^ b)

"""
{'d', 'b', 'r', 'c', 'a'}
{'z', 'l', 'm', 'c', 'a'}
{'r', 'd', 'b'}
{'d', 'z', 'b', 'r', 'l', 'm', 'c', 'a'}
{'c', 'a'}
{'r', 'd', 'l', 'z', 'm', 'b'}
"""

集合的定义和操作案例

# 有如下列表对象:
# my_list=["黑马程序员','传智播客','黑马程序员','传智播客',
# 'itheima', 'itcast', 'itheima', 'itcast', 'best']
#
# 请:
# ·定义一个空集合
# ·通过for循环遍历列表
# ·在for循环中将列表的元素添加至集合
# ·最终得到元素去重后的集合对象,并打印输出

my_list = ['黑马程序员', '传智播客', '黑马程序员', '传智播客', 'itheima', 'itcast', 'itheima', 'itcast', 'best']
# 定义一个空集合
my_set = set()
# 通过for循环遍历列表
for element in my_list:
    # 在for循环中得到列表的元素添加到集合
    my_set.add(element)
# 最终得到的元素去重后的集合对象,并打印输出
print(f'列表的内容是:{my_list}')
print(f"通过for循环后,得到的集合对象是:{my_set}")
"""
列表的内容是:['黑马程序员', '传智播客', '黑马程序员', '传智播客', 'itheima', 'itcast', 'itheima', 'itcast', 'best']
通过for循环后,得到的集合对象是:{'best', 'itheima', '黑马程序员', '传智播客', 'itcast'}
"""

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3415226167@qq.com
资源 相册