——集合——
现在有这样的一个情景:我们有两个列表,group1 = [1,2,3,4,5,6,7,8,9],group2 = [1,3,5,7,9,11,13,15,17,19],group1和group2里面有重复的数字1,3,5,7,9,现在我们想把两个列表合并一下,如果某个数字出现两次,我们只记录一次。那应该怎么操作?
如果用已学过的知识,我们能想到的就是写循环。先循环列表group1,把group1中所有的数字都存到一个新的列表group中,接下来循环group2,如果group1中没有group2中的某个数字,我们就将group2中的这个数字继续存在这个新的列表group中。程序如下:
这样写非常的麻烦,并且消耗的内存也大。
集合可以实现上述功能,即集合可以去重,把一个列表变成集合就自动去重了。
除此之外,集合还有另一个作用:关系测试,测试两组数据之前的交集、差集、并集等关系。
①去重
通过group1.extend(group2),我们把group1和group2合并成了一个列表,这个列表现在为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19],可以看到里面有重复的数据(1,3,5,7,9)。我们现在讲这个列表转为集合,结果为:{1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 15, 17, 19},去掉了重复的1,3,5,7,9。所以集合有去重的功能。
②关系测试
#关系测试——交集
语法:set.intersection(set1, set2 ... etc)
intersection() 方法用于返回两个或更多集合中都包含的元素,即交集。
#关系测试——并集
语法:set.union(set1, set2...)
union() 方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。
#关系测试——差集
语法:set.difference(set)
difference() 方法用于返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中。
#关系测试——子集
语法:set.issubset(set)
issubset() 方法用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。
#关系测试——超集
语法:set.issuperset(set)
issuperset() 方法用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。
#关系测试——对称差集
语法:set.symmetric_difference(set)
symmetric_difference() 方法返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。
#关系测试——互斥
语法:set.isdisjoint(set) (disjoint:不相交)
isdisjoint() 方法用于判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
关系测试除了用上述语句表达之外,还可以用运算符表达。
交集——"&";并集——"|";差集——"-";对称差集——"^"
——集合的其他操作——
①增
#添加一项
语法:set.add(elmnt)
add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
#添加多项
语法:set.update(set)
update() 方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
②查
#查看集合的长度
语法:len( set )
len() 方法返回对象长度或项目个数。
#查看某元素是否在该集合内
语法:x in set
x in set 测试x是否在set中,如果在返回True,不在返回False。
语法:x not in set
x not in set 测试x是否不在set中,如果不在返回True,如果在返回False。
③删
(1)语法:set.remove(item)
remove() 方法用于移除集合中的指定元素。
该方法不同于 discard() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
只能删除指定的一项。
可以看到,当删除的元素不存在时,会报错。
(2)语法:set.discard(value)
discard() 方法用于移除指定的集合元素。
该方法不同于 remove() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
(3)语法:set.pop()
pop() 方法用于随机移除一个元素。返回移除的元素。
④复制
语法:set.copy()
copy() 方法用于拷贝一个集合。
说明一点:这个copy同样也是一个浅copy。