Python数据容器:集合

2024-07-21 21:59:36 浏览数 (2)

前言

在 Python 中,数据容器是组织和管理数据的重要工具,集合作为其中一种基本的数据结构,具有独特的特性和广泛的应用。本章详细介绍了集合的定义、常用操作以及遍历方法。


本篇文章参考:黑马程序员

一、集合的定义

我们目前已经学习了列表、元组、字符串三个数据容器了,基本能满足大多数的使用场景,但为何又需要学习新的集合类型呢?

通过特性来分析:

  • 列表可修改、支持重复元素且有序
  • 元组、字符串不可修改、支持重复元素且有序

我们发现列表、元组、字符串这三个数据容器局限在于它们都支持重复元素。如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。而集合最主要的特点就是不支持元素的重复(自带去重功能)并且内容无序。

①基本语法:

定义集合使用花括号“{}”,且使用逗号隔开各个数据,数据可以是不同的数据类型。

  • 定义字面量: {元素1,元素2,元素3,元素4,...}
  • 定义变量: 变量名称 = {元素1,元素2,元素3,元素4,…}
  • 定义空元组: 变量名称 =set()

②特点:

  • 可容纳多个数据
  • 可容纳不同类型的数据(混装)
  • 可修改(增加或删除元素等)
  • 数据是无序存储的(不支持下标索引)
  • 不允许重复数据存在
  • 支持for循坏,不支持while循坏
代码语言:python代码运行次数:0复制
# 定义集合
my_set={"A","B","C","B","A"}
# 定义一个空集合
my_set_empty=set()
print(f"my_set的内容为{my_set},类型是{type(my_set)}")
print(f"my_set_empty的内容为{my_set_empty},类型是{type(my_set_empty)}")

输出结果:

my_set的内容为{'A', 'C', 'B'},类型是<class 'set'>

my_set_empty的内容为set(),类型是<class 'set'>

二、集合的常用操作(方法)

因为集合是无序的,所以集合不支持下标索引访问。

集合的常用方法:

①添加元素:

将指定元素,添加到集合内,集合本身被修改。

语法:集合.add(元素)

代码语言:python代码运行次数:0复制
# 添加新元素
my_set={"A","B","C"}
my_set.add("D")
my_set.add("A")
print(f"my_set添加元素后结果为{my_set}")

输出结果:

my_set添加元素后结果为{'A', 'C', 'D', 'B'}

②移除元素:

将指定元素,从集合内移除,集合本身被修改。

语法:集合.remove(元素)

代码语言:python代码运行次数:0复制
# 移除元素
my_set={"A","B","C"}
my_set.remove("A")
print(f"my_set移除元素后结果为{my_set}")

输出结果:

my_set移除元素后结果为{'C', 'B'}

③随机取出元素:

从集合中随机取出一个元素,得到一个元素的结果,同时集合本身被修改,元素被移除。

语法:集合.pop()

代码语言:python代码运行次数:0复制
# 随机取出一个元素
my_set={"A","B","C"}
element=my_set.pop()
print(f"集合被取出的元素是{element},my_set移除元素后结果为{my_set}")

输出结果:

集合被取出的元素是A,my_set移除元素后结果为{'C', 'B'}

④清空集合:

清空集合。

语法:集合.clear()

代码语言:python代码运行次数:0复制
my_set={"A","B","C"}
my_set.clear()
print(f"my_set被清空后结果为{my_set}")

输出结果:

my_set被清空后结果为set()

⑤取出两个集合的差集:

取出集合1和集合2的差集(集合1有而集合2没有的),得到一个新集合,集合1和集合2不变。

语法:集合1.difference(集合2)

代码语言:python代码运行次数:0复制
# 取两个集合的差集
set1={1,2,3}
set2={4,2,7}
set3=set1.difference(set2)
print(f"取出差集后结果为{set3}")
print(f"取出差集后,set1内容为{set1}")
print(f"取出差集后,set2内容为{set2}")

输出结果:

取出差集后结果为{1, 3}

取出差集后,set1内容为{1, 2, 3}

取出差集后,set2内容为{2, 4, 7}

⑥消除两个集合的差集:

对比集合1和集合2,在集合1内删除和集合2相同的元素,集合1被修改,集合2不变。

语法:集合1.difference_update(集合2)

代码语言:python代码运行次数:0复制
# 消除差集
set1={1,2,3}
set2={4,2,7}
set1.difference_update(set2)
print(f"消除差集后,set1内容为{set1}")
print(f"消除差集后,set2内容为{set2}")

输出结果:

消除差集后,set1内容为{1, 3}

消除差集后,set2内容为{2, 4, 7}

⑦两个集合合并:

将集合1和集合2组合成新集合,得到新集合,集合1和集合2不变。

语法:集合1.union(集合2)

代码语言:python代码运行次数:0复制
# 两个集合合并
set1={1,2,3}
set2={4,2,7}
set3=set1.union(set2)
print(f"两个集合合并后结果为{set3}")
print(f"两个集合合并后,set1内容为{set1}")
print(f"两个集合合并后,set2内容为{set2}")

输出结果:

两个集合合并后结果为{1, 2, 3, 4, 7}

两个集合合并后,set1内容为{1, 2, 3}

两个集合合并后,set2内容为{2, 4, 7}

⑧统计集合长度:

统计集合内有多少元素,得到一个整数结果。

语法:len(集合)

代码语言:python代码运行次数:0复制
# 统计集合长度
set1={1,2,3}
num=len(set1)
print(f"集合内的元素数量为{num}")

输出结果:

集合内的元素数量为3

三、集合的遍历

集合不支持下标索引,所以不支持使用while循环,但是支持使用for循环遍历。

for循坏遍历:

代码语言:python代码运行次数:0复制
# 集合的遍历
# 集合不支持下标索引,所以不能用while循坏,可用for循坏
set1={1,2,3}
for element in set1:
    print(f"集合的元素有{element}")

输出结果:

集合的元素有1

集合的元素有2

集合的元素有3

【例题】

有如下列表对象:

my_list = ['新闻', '传播', '新闻', '传播', 'Hi', 'Python', 'Hi', 'Python', 'best',请按如下要求操作:

1.定义一个空集合

2.通过for循环遍历列表

3.在for循环中将列表的元素添加至集合

4.最终得到元素去重后的集合对象,并打印输出

代码语言:python代码运行次数:0复制
my_list = ['新闻', '传播', '新闻', '传播', 'Hi', 'Python', 'Hi', 'Python', 'best']
# 定义一个空集合
my_set=set()
# 通过for循坏遍历列表
for element in my_list:
    # 在for循坏中将列表元素添加至集合
    my_set.add(element)

print(f"列表的内容为{my_list}")
print(f"通过for循坏得到的集合为{my_set}")

输出结果:

列表的内容为'新闻', '传播', '新闻', '传播', 'Hi', 'Python', 'Hi', 'Python', 'best'

通过for循坏得到的集合为{'Hi', '传播', '新闻', 'Python', 'best'}

0 人点赞