my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客', 'itheima', 'itcast', 'itheima', 'itcas', 'best'] New_set = set() for element in my_list: New_set.add(element) print(f"最终得到的集合为:{New_set}") # 输出结果:最终得到的集合为:{'itcas', 'best', 'itheima', 'itcast', '黑马程序员', '传智播客'}
1、集合(set)存在的意义(为什么要有集合?)
通过特性来分析:
列表可修改、支持重复元素且有序;元组、字符串不可修改、支持重复元素且有序。以上的数据容器都支持重复元素,但是如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。
而集合,最主要的特点是:不支持元素的重复(即使输入的元素重复,也会自带去重功能)并且内容无序。如果定义了一个内部元素有重复的集合,输出它,会发现它已经自动去重了。
2、集合的定义
定义集合变量 变量名称 = {元素1,元素2,元素3……}
定义空集合 变量名称 = set(())
列表:[]
元组:()
字符串:""
集合:{}
3、集合不是序列
当说到集合不是序列时,意味着集合与序列具有不同的特性和行为。序列是指包含有序元素的数据结构,例如列表、元组和字符串。序列具有以下特性:
1. 有序性:序列中的元素按一定顺序排列,并且可以通过索引访问元素。
2. 可索引性:可以使用索引来访问指定位置的元素。
3. 可切片性:可以通过切片操作获取序列的子序列。
4. 可迭代性:可以使用迭代器逐个访问序列中的元素。
5. 元素重复性:序列允许包含重复的元素。相比之下,集合是无序的,不包含重复元素的数据结构。集合具有以下特性:
1. 无序性:集合中的元素没有固定的顺序,无法通过索引访问元素。
2. 不可索引性:集合中的元素无法通过索引来访问,因为集合没有定义元素的顺序。
3. 不可切片性:集合不支持切片操作,因为无序性导致无法定义子集合的范围。
4. 不可迭代性:集合不是可迭代对象,无法使用迭代器逐个访问元素。
5. 唯一性:集合中的元素是唯一的,不允许包含重复元素。总之,虽然集合在某些方面与序列有相似之处,但它们在行为和特性上存在明显的差异。
4、集合常用操作
操作 语法 结果 下标索引访问 集合不支持该操作 集合不支持该操作(因为集合是乱序的,且集合不是序列) 遍历集合 不支持while循环,但是支持for循环 得到集合中的元素 添加新元素 集合.add() 集合本身被修改,添加了新元素 移除元素
(将指定元素,从集合内移除)集合.remove(元素) 集合本身被修改,移除了元素 从集合中随机取出一个元素 集合.pop() 会得到一个元素的结果
同时集合本身被修改,元素被移除
清空集合 集合.clear() 集合被清空 取出2个集合的差集
(只有集合有该操作)集合3 = 集合1.difference(集合2) 取出集合1和集合2的差集(集合1有,而集合2没有的)
得到一个新的集合,集合1和集合2不变
消除2个集合的差集 集合3 = 集合1.difference _update(集合2) 集合1被修改,集合2不变
集合1内与集合2相同的元素被删除集合3就是集合1
2个集合合并
将集合1和集合2组合成新集合
集合3 = 集合1.unior(集合2) 得到新集合, 集合1和集合2不变 求集合的长度 len(集合) 得到集合的长度 示例代码:
my_set = {"1", "2", "3", "4", "5", "1", "2", "3", "4"} my_set_empty = set() print(my_set) print(my_set_empty) """ 输出结果: {'4', '2', '1', '3', '5'} set() """ # 集合添加元素 add() my_set = {"1", "2", "3", "4", "5", "1", "2", "3", "4"} my_set.add("Python") print(f"增加元素后的集合为{my_set}") # python 的位置是不固定的。 # 输出:增加元素后的集合为{'4', '5', '1', 'Python', '2', '3'} # 集合移除元素 remove() my_set.remove("1") print(f"移除元素后的集合为{my_set}") # 输出:移除元素后的集合为{'4', '5', 'Python', '2', '3'} # 集合随机移除一个元素 element = my_set.pop() #element是被移除的元素 print(f"随机移除一个元素后,集合为{my_set}") print(f"被随机移除的元素是:{element}") """ 输出结果: 随机移除一个元素后,集合为{'Python', '5', '4', '2'} 被随机移除的元素是:3 """ # 集合的差集 set1 = {"1", "2", "3", "4", "5", "Hello", "World"} set2 = {"1", "2", "3", "4", "5"} set3 = set1.difference(set2) print(f"集合1与集合2的差集为{set3}") # 输出:集合1与集合2的差集为{'World', 'Hello'} set4 = {"1", "2", "3", "4", "5"} set5 = {"1", "2", "3", "4", "5", "Hello", "World"} set6 = set4.difference(set5) print(f"集合5与集合6的差集为{set6}") # 输出:集合5与集合6的差集为set() (表明差集是空集) # 消除2个集合的差集 set1.difference_update(set2) print(f"消除2个集合的差集后的集合1为:{set1}") # 输出:消除2个集合的差集后的集合1为:{'World', 'Hello'} # 集合合并 print(f"合并前的set1为{set1},合并前的my_set为{my_set}") set7 = set1.union(my_set) print(f"合并后的集合为{set7}") ''' 输出: 合并前的set1为{'World', 'Hello'},合并前的my_set为{'2', 'Python', '4', '5'} 合并后的集合为{'Python', 'World', 'Hello', '2', '4', '5'} ''' # 遍历集合 print(f"my_set中的元素分别为", end=": ") for element in my_set: print(element,end=" ") # 输出:my_set中的元素分别为: Python 3 4 5
5、代码练习——信息去重
有如下列表对象:
my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客', 'itheima', 'itcast', 'itheima', 'itcas', 'best']
请:
1、定义一个空集合
2、通过for循环追历列表
3、在for循环中将列表的元素添加至集合
4、最终得到元素去重后的集合对象,并打印输出my_list=['黑马程序员', '传智播客', "黑马程序员", '传智播客', 'itheima', 'itcast','itheima', 'itcas', 'best'] New_set = set() for element in my_list: New_set.add(element) print(f"最终得到的集合为:{New_set}") """ 输出结果:最终得到的集合为:{'itcas', 'best', 'itheima', 'itcast', '黑马程序员', '传智播客'} """