目录
一.思考
为什么使用集合?
我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景。为何又需要学习新的集合类型呢?
通过特性来分析:
- 列表可修改.支持重复元素且有序
- 元组、字符串不可修改.支持重复元素且有序
大家,有没有看出一些局限?
局限就在于:它们都支持重复元素。
如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。
而集合,最主要的特点就是:不支持元素的重复(自带去重功能)、并且内容无序
二.集合
基本语法
和列表、元组、字符串等定义基本相同:
- 列表使用:[ ]
- 元祖使用:( )
- 字符串使用:" "
- 集合使用:{ }
演示
my_set = {"你好","世界","程序设计"}
my_set1 =set() #定义空集合
my_set2 = {"你好世界,程序设计"}
my_set3 = {"d","d","b","a"}
my_set4 = {"a","c","c","d"}
print(f"my_set的内容是{my_set},它的类型是{type(my_set)}")
print(f"my_set1的内容是{my_set1},它的类型是{type(my_set1)}")
print(f"my_set2的内容是{my_set2},它的类型是{type(my_set2)}")
print(f"my_set3的内容是{my_set3},它的类型是{type(my_set3)}")
print(f"my_set4的内容是{my_set4},它的类型是{type(my_set4)}")
#由结果可知最后输出的集合是无序、不重复的
结果是
由结果可知最后输出的集合是无序、不重复的
set里面的元素可以是列表、元组、range对象等。另外,也可以是字符串,如果字符串,返回值将是包含全部不重复字符的集合。
my_set2 = {"你好世界,程序设计"}
my_set = set("你好世界,程序设计")
my_set1 = set([1,2.3,4,5.325,3])
print(f"my_set的内容是{my_set},它的类型是{type(my_set)}")
print(f"my_set2的内容是{my_set2},它的类型是{type(my_set2)}")
print(f"my_set1的内容是{my_set1},它的类型是{type(my_set1)}")
结果是
集合的常用操作——修改
首先,因为集合是无序的,所以集合不支持:下标索引访问
但是集合和列表一样,是允许修改的,所以我们来看看集合的修改方法。
- 添加新元素
- 移除元素
- 从集合中随机取出元素
- 清空集合
- 消除两个集合的差集
- 两个集合合并
- 统计集合元素数量len( )
1.添加新元素
语法:集合.add(元素)。将指定元素,添加到集合内
结果:集合本身被修改,添加了新元素
2.移除元素
语法:集合.remove(元素),将指定元素,从集合内移除
结果:集合本身被修改,移除了元素
3.从集合中随机取出元素
语法:集合.pop(),功能,从集合中随机取出一个元素
结果:会得到一个元素的结果。同时集合本身被修改,元素被移除
4.清空集合
语法:集合.clear(),功能,清空集合
结果:集合本身被清空
5. 消除两个集合的差集
语法:集合1.difference_update(集合2)
功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素。
结果:集合1被修改,集合2不变
演示
t1 = {"1","2","4"}
t2 = {"2","4","5"}
t1.difference_update(t2)
print(t1)
print(t2)
6.两个集合的合并
语法:集合1.union(集合2)
功能:将集合1和集合2组合成新集合
结果:得到新集合,集合1和集合2不变
演示
注意:集合的遍历
集合不支持下标索引,不能用while循环但是可以用for循环
演示
三.集合总结
经过上述对集合的学习,可以总结出集合有如下特点:
- 可以容纳多个数据
- 可以容纳不同类型的数据(混装)
- 数据是无序存储的(不支持下标索引)
- 不允许重复数据存在
- 可以修改(增加或删除元素等)
- 支持for循环