Python-VBA函数之旅-set函数,Python-VBA函数之旅,set函数详解

马肤
摘要:,,本文介绍了Python和VBA中的set函数之旅。通过对比两种编程语言的set函数,探讨了它们在数据处理中的应用和差异。文章详细阐述了set函数的基本用法,包括创建集合、添加元素、删除元素以及进行集合运算等。通过实例展示了set函数在处理数据时的便捷性和实用性,帮助读者更好地理解和应用set函数。

目录

一、set函数的常见应用场景:

二、set函数使用注意事项

三、如何用好set函数?

1、set函数:

1-1、Python:

1-2、VBA:

2、推荐阅读:

个人主页: https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421

Python-VBA函数之旅-set函数,Python-VBA函数之旅,set函数详解 第1张Python-VBA函数之旅-set函数,Python-VBA函数之旅,set函数详解 第2张Python-VBA函数之旅-set函数,Python-VBA函数之旅,set函数详解 第3张

一、set函数的常见应用场景:

        在Python中,set()函数用于创建一个无序且不包含重复元素的集合,由于其独特的性质,set()函数在许多实际场景中都非常有用,常见的应用场景有:

1、去重:当你有一个列表或其他可迭代对象,并且你想快速去除其中的重复元素时,可以使用 set()函数。

2、快速查找:由于set的实现基于哈希表,因此它提供了平均时间复杂度为O(1)的成员查找操作(即 `in` 关键字),这在需要快速检查元素是否存在于集合中时非常有用。

3、集合运算:集合支持多种集合运算,如并集(|)、交集(&)、差集(-)和对称差集(^),这些运算在数据分析、算法实现等领域非常有用。

4、过滤和选择:结合列表推导式,可以使用集合来过滤和选择数据。

5、字典键去重:由于集合中的元素是唯一的,因此它们经常被用作字典的键来确保键的唯一性。

6、性能优化:在某些需要快速查找或判断元素是否存在的场景中,使用集合通常比使用列表更快,因为集合在内部使用哈希表实现,提供了快速的查找和插入操作。

7、图形和网络算法:在处理图形和网络问题时,set常常用于表示节点或边的集合,并进行诸如查找连接节点、计算共同邻居等操作。

8、数据清洗和预处理:在数据清洗和预处理阶段,集合可以用于快速识别并去除重复的数据项。

9、缓存和状态管理:在某些情况下,你可能需要跟踪一个对象或一组对象的状态或属性,使用set()函数可以轻松地存储这些状态,并在需要时进行检查或更新。

10、实现集合的幂集:集合的幂集是所有可能的子集(包括空集和原集合本身)的集合。

Python-VBA函数之旅-set函数,Python-VBA函数之旅,set函数详解 第4张

二、set函数使用注意事项

        在Python中,set()是一个内置的数据类型,用于存储无序且不重复的元素集合。虽然set()本身不是一个函数(它是一个类,用于创建集合对象),但了解其使用方式和注意事项对于有效使用集合是非常重要的。以下是使用set()(或集合)时的一些注意事项:

1、无序性:集合是无序的,因此你不能依赖元素在集合中的插入顺序。
2、不可变性:集合中的元素必须是不可变类型(如整数、浮点数、字符串、元组等),但集合本身是可变的。
3、去重性:集合会自动去除重复的元素,如果你尝试向集合中添加一个已经存在的元素,该操作不会有任何效果。
4、不支持索引:由于集合是无序的,因此它不支持索引或切片操作。
5、运算符支持:集合支持多种集合运算符,如并集(|)、交集(&)、差集(-)和对称差集(^)。
6、迭代:你可以遍历集合中的所有元素。
7、添加和删除:你可以使用add()方法向集合中添加元素,使用remove()或discard()方法删除元素,如果尝试删除的元素不存在于集合中,remove()会引发KeyError异常,而discard()则不会。
8、性能:集合的查找、添加和删除操作通常具有平均时间复杂度为O(1)的性能,这是因为集合在内存中是通过哈希表实现的。
9、转换:你可以将其他可迭代对象(如列表、元组或字符串)转换为集合,以去除其中的重复元素,但要注意,这样做会丢失原始顺序。
10、空集合的创建:要创建一个空集合,你不能只使用{},因为这会创建一个空字典;相反,你应该使用set()或{}后跟一个逗号来创建空集合(例如set() 或{}),但在实践中,通常只使用set()。
11、子集和超集:你可以使用 `=` 运算符来检查一个集合是否是另一个集合的子集或超集。
12、不可哈希类型:集合不能包含列表或其他可变类型作为元素,因为这些类型是不可哈希的,如果你尝试这样做,Python会抛出一个TypeError异常。
13、冻结集合:如果你需要一个不可变的集合(即其元素在创建后不能更改),可以使用 frozenset()函数来创建一个冻结集合。

Python-VBA函数之旅-set函数,Python-VBA函数之旅,set函数详解 第5张

三、如何用好set函数?

        在Python中,set()不是一个函数,而是一个内置的数据类型,用于创建集合对象;集合(set)是一个无序且不包含重复元素的数据集合,要充分利用Python的集合(set),需遵循以下建议:

1、去重:集合的一个主要优点是它们会自动去除重复的元素,如果你有一个列表或其他可迭代对象,并且想要去除其中的重复项,你可以将其转换为集合。

2、集合运算:集合支持多种集合运算,如并集、交集、差集和对称差集。

3、检查元素是否存在:使用 `in` 关键字可以检查一个元素是否存在于集合中。

4、添加和删除元素:使用add()方法向集合中添加元素,使用remove()或discard()方法删除元素。

5、集合的交集更新:如果你想要更新一个集合,使其只包含与另一个集合的交集,可以使用intersection_update()方法。

6、集合的差集更新:类似地,你可以使用difference_update()方法来更新一个集合,使其只包含与另一个集合的差集。

7、判断子集和超集:使用 `=` 运算符来判断一个集合是否是另一个集合的子集或超集。

8、不可变集合:如果你需要一个不可变的集合(即其内容在创建后不能更改),可以使用 frozenset(),这在需要将集合作为字典的键或其他需要不可变类型的地方时很有用。

9、注意性能:集合的查找、添加和删除操作通常具有平均时间复杂度为O(1)的性能,因为它们是通过哈希表实现的,这使得集合在处理大型数据集时特别有效。

10、小心使用可变元素:集合中的元素必须是不可变的,如果你尝试将一个可变对象(如列表)添加到集合中,Python会抛出一个TypeError异常。

Python-VBA函数之旅-set函数,Python-VBA函数之旅,set函数详解 第6张

1、set函数:
1-1、Python:
# 1.函数:set
# 2.功能:用于将可迭代对象转换为一个无序且无重复元素的可变集合
# 3.语法:set([iterable])
# 4.参数:iterable,表示要转换为集合的可迭代对象,可以是列表、元组、range对象、字符串等
# 5.返回值:
# 5-1、无参形式:返回一个新的空集合
# 5-2、有参形式:返回一个新的集合对象
# 6.说明:
# 7.示例:
# 用dir()函数获取该函数内置的属性和方法
print(dir(set))
# ['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',
# '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__',
# '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__',
# '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__',
# '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection',
# 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
# 用help()函数获取该函数的文档信息
help(set)
# 应用一:去重
# 示例1: 去除列表中的重复项
# 原始列表包含重复项
original_list = [1, 2, 2, 3, 4, 4, 5, 5, 5]
# 使用set()去除重复项,然后转回列表
unique_list = list(set(original_list))
# 注意:set是无序的,因此转换回列表后顺序可能会改变
print(unique_list)  # 输出可能是 [1, 2, 3, 4, 5],但顺序不一定
# 如果需要保持原始顺序,可以使用其他方法,如列表推导式和if语句
unique_list_ordered = []
[unique_list_ordered.append(item) for item in original_list if item not in unique_list_ordered]
print(unique_list_ordered)  # 输出将保持原始顺序
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]
# 示例2: 去除字符串中的重复字符
# 原始字符串包含重复字符
original_string = "Hello, Python!"
# 使用set()去除重复字符,但set不能直接转回字符串
unique_chars = set(original_string)
# 如果需要将结果转换回字符串,并去除顺序的影响(因为set是无序的)
unique_string = ''.join(sorted(unique_chars))
print(unique_string)
# !, HPehlnoty
# 示例3: 去除嵌套列表中的重复子列表(注意:set不能直接处理列表作为元素)
# 原始嵌套列表包含重复子列表
original_nested_list = [[1, 2], [3, 4], [1, 2], [5, 6]]
# 使用tuple()转换子列表为元组,并使用set()去除重复项
unique_nested_set = set(map(tuple, original_nested_list))
# 转换回列表(但子列表将变为元组)
unique_nested_list_tuples = list(unique_nested_set)
# 如果需要子列表仍为列表而不是元组,则再次转换
unique_nested_list = [list(item) for item in unique_nested_list_tuples]
print(unique_nested_list)
# [[1, 2], [3, 4], [5, 6]]
# 应用二:快速查找
# 示例1: 查找元素是否在集合中
# 创建一个集合
my_set = {3, 5, 6, 8, 10, 11, 24}
# 查找元素
element_to_find = 10
if element_to_find in my_set:
    print(f"{element_to_find} 在集合中")
else:
    print(f"{element_to_find} 不在集合中")
# 查找不存在的元素
element_not_found = 7
if element_not_found in my_set:
    print(f"{element_not_found} 在集合中")
else:
    print(f"{element_not_found} 不在集合中")
# 10 在集合中
# 7 不在集合中
# 示例2: 使用集合进行快速去重和查找
# 原始列表包含重复元素
original_list = [1, 2, 2, 3, 4, 4, 5, 5, 5]
# 使用集合去重
unique_set = set(original_list)
# 查找元素
element_to_find = 4
if element_to_find in unique_set:
    print(f"{element_to_find} 在去重后的集合中")
else:
    print(f"{element_to_find} 不在去重后的集合中")
# 如果你想将结果转换回列表(但不保证顺序)
unique_list = list(unique_set)
print(unique_list)
# 4 在去重后的集合中
# [1, 2, 3, 4, 5]
# 示例3: 查找两个集合的交集
# 创建两个集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
# 查找交集
intersection = set1 & set2
print(intersection)
# 查找一个元素是否在两个集合的交集中
element_to_check = 4
if element_to_check in intersection:
    print(f"{element_to_check} 在两个集合的交集中")
else:
    print(f"{element_to_check} 不在两个集合的交集中")
# {4, 5}
# 4 在两个集合的交集中
# 应用三:集合运算
# 示例1: 并集(Union)
# 创建两个集合
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 使用 | 运算符计算并集
union_set = set1 | set2
print(union_set)
# {1, 2, 3, 4, 5, 6}
# 示例2: 交集(Intersection)
# 创建两个集合
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 使用 & 运算符计算交集
intersection_set = set1 & set2
print(intersection_set)
# {3, 4}
# 示例3: 差集(Difference)
# 创建两个集合
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 使用 - 运算符计算差集(set1中有但set2中没有的元素)
difference_set = set1 - set2
print(difference_set)
# 反过来计算差集(set2中有但set1中没有的元素)
difference_set_reverse = set2 - set1
print(difference_set_reverse)
# {1, 2}
# {5, 6}
# 示例4: 对称差集(Symmetric Difference)
# 创建两个集合
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 使用 ^ 运算符计算对称差集(存在于一个集合中但不同时存在于两个集合中的元素)
symmetric_difference_set = set1 ^ set2
print(symmetric_difference_set)
# 示例5: 判断一个集合是否是另一个集合的子集(Subset)
# 创建两个集合
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}
# 使用 

0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码