Python16 Set集合容器

图片

1. Set集合数据类型

Python 中的 Set(集合)是一种无序、可变的数据集合,其中不允许重复的元素。它是由大括号 {} 构成的,元素之间用逗号分隔。Set 中的元素必须是不可变的数据类型,例如整数、浮点数、元组、字符串等。Set 是一种很有用的数据结构,基本功能包括集合运算、关系测试和消除重复元素。与列表(List)相比,Set 具有以下特点:

1.Set 中的元素是无序的,无法通过索引访问。

2.Set 中不允许重复的元素,如果尝试添加重复的元素,只会保留一个。

3.Set 是可变的,可以添加或删除元素。

4.Set 不支持索引、切片等其它类序列(sequence-like)的操作。

5.Set 支持 x in set, len(set),和 for x in set,作为一个无序的集合,sets不记录元素位置或者插入点。

可以使用 set() 函数来创建一个空的 Set,或者通过在大括号 {} 中提供元素来创建 Set。

2.浅拷贝与深拷贝

在Python中,浅拷贝(shallow copy)和深拷贝(deep copy)是用来创建可变对象副本的两种不同方式,它们的主要区别在于复制过程中对对象内部嵌套对象的处理方式。

  1. 浅拷贝(Shallow Copy):

    • 浅拷贝会创建一个新的对象,该对象的内容是原始对象中的元素的引用(或者说是对原始对象中元素的引用)。

    • 如果原始对象中的元素是不可变的,那么浅拷贝将创建一个完全独立的副本,因为不可变对象无法被修改。

    • 但是,如果原始对象中的元素是可变的(例如列表、字典等),那么浅拷贝将只复制元素的引用,而不会创建新的副本。这意味着对副本中的可变元素的修改会影响原始对象中的相应元素,因为它们引用的是同一个对象。

  2. 深拷贝(Deep Copy):

    • 深拷贝会递归地复制原始对象及其所有嵌套对象,创建一个完全独立的副本。

    • 即使原始对象中的元素是可变的,深拷贝也会为每个元素创建新的副本,而不是简单地复制引用。

    • 这意味着对深拷贝副本中的任何对象的修改都不会影响原始对象,因为它们是完全独立的。

在Python中,可以使用 copy 模块中的 copy() 函数来执行浅拷贝,使用 copy.deepcopy() 函数来执行深拷贝。

3.集合的常用操作

1.交集
# 交集、并集、差集 & | -
# 交集 &

# 使用{}创建集合
my_set = {'apple', 'banana', 'orange'}

my_set2 = {'apple', 'banana', 'orange'}

s1=set('cheney')
s2=set(['a','b','c'])
s1&s2  # 等同于s1.intersection(s2)

图片

2.并集
# 并集 |
s1=set('cheney')
s2=set(['a','b','c'])
s1|s2  # s1.union(s2)

图片

3.差集
# 差集 -
s1=set('cheney')
s2=set(['a','b','c'])
s1|s2  # s1.difference(s2)

图片

4.对称差(两个集合中不重复的元素的集合)
# 对称差集 ^
s1=set('cheney')
s2=set(['a','b','c'])
s1^s2  # s1.symmetric_difference(s2)

图片

5.集合去重
# 集合去重
s3=[11,2,3,22,11,22]
s=set(s3)
s

图片

6.添加一个元素
s4=set("Hello")
s4.add('Python16')
s4

图片

7.添加多个元素
s4.update([1,2,3.4])
s4

图片

8.删除某个元素
# 删除某项
s4.remove(3.4)
s4

图片

9.获取集合长度
# 集合的长度
len(s4)

图片

10.判断元素是否在集合中
x='o'
x in s4

图片

y='s'
y not in s4

图片

11.判断一个集合是否为另一个集合的子集
s = set('hello')
s.issubset(s4)

图片

12.创建一个新的集合

浅拷贝一个新集合。

s5 = s4.copy()
s5 

图片

以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

### Python 中 `set` 集合的详细介绍及使用方法 #### 1. 创建集合 Python 提供了两种方式来创建集合: - 使用大括号 `{}` 来定义集合,注意空的大括号会创建一个字典而不是集合[^4]。 ```python fruits = {'apple', 'banana', 'orange'} ``` - 使用内置函数 `set()` 将其他可迭代对象(如列表、字符串等)转换成集合。 ```python numbers_list = [1, 2, 3, 4, 5] number_set = set(numbers_list) print(number_set) # 输出 {1, 2, 3, 4, 5} empty_set = set() print(empty_set) # 输出 set() ``` #### 2. 特性说明 集合具有以下几个重要特性: - **唯一性**:不允许存在重复项;如果尝试向已存在的元素再次添加相同的值,则不会有任何效果。 - **无序性**:不像列表那样保持插入顺序,在遍历时可能会有不同的排列形式。 - **不可变成员**:虽然整个集合是可以改变的,但是其内部所含有的每一个元素都应该是不可变得类型,比如整数、浮点数或字符串等基本数据结构。不能包含像列表这样的可变容器作为元素。 #### 3. 基本操作 对于已经建立好的集合来说,支持如下几种常见的运算符和方法来进行各种各样的处理工作: ##### 添加/移除元素 可以通过 `.add(element)` 方法给定一个新的项目加入到当前集中; 也可以利用`.remove(element)` 或者 `.discard(element)` 删除指定条目,区别在于当试图去除不存在于其中的对象时前者抛异常而后者静默失败。 ```python colors = {"red", "green"} colors.add("blue") # 正常情况下增加新颜色 blue 到 colors 当中 print(colors) try: colors.remove('yellow') # 如果黄色不在里面则引发 KeyError 错误 except KeyError as e: print(f"{e} not found") colors.discard('purple') # 即使紫色不存在也不会报错 ``` ##### 计算交集、并集与差集 可以分别调用 `.intersection(other_set)` , `.union(another_set)` 和 `.difference(yet_another_set)` 实现上述三种逻辑关系的操作[^3]. ```python a = {1, 2, 3, 4} b = {3, 4, 5, 6} intersected_elements = a.intersection(b) # 获取共同拥有的部分 -> {3, 4} all_unique_elements = a.union(b) # 合并与去重后的结果 -> {1, 2, 3, 4, 5, 6} elements_only_in_a = a.difference(b) # 属于 A 不属于 B 的那些 -> {1, 2} ``` #### 4. 排序问题 由于集合本身不具备有序性质,因此直接对其进行排序是没有意义的。不过可以在将其转化为列表之后再做进一步安排[^2]: ```python unsorted_numbers = {7, 8, 9, 0, 1} sorted_version = sorted(unsorted_numbers) print(sorted_version) # 结果为升序排列的 list 类型 [0, 1, 7, 8, 9] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值