时间:2022-12-03 12:11:36 | 栏目:Python代码 | 点击:次
集合的最大特征是其每个元素都是唯一的,它可以删除、可以增加、也可以通过增删实现替换元素,但是它是没有下标的,你无法通过下标或者切片功能访问集合。因为集合就像一个袋子里面装着颜色不一样的玻璃球,你可以替换玻璃球,但是无法指定玻璃球存放的地点。
它最大的作用,就是它元素的唯一,它经常被用来清除多余的数据。
可以使用 {} 直接创建集合,但是不能使用 {} 创建空集合,因为 {} 被用来创建空字典。你只能通过 set() 来创建空集合。
使用内置函数 set,可以快速的将其他类型的可迭代对象转换成 集合 对象。这些可迭代对象,可以是字符串、列表、元组等等。
print("创建一个空集合") print(set()) str1 = 'ABCDEF!' s=set(str1) print("*"*40) print("一个由字符串转换的集合,每个元素即唯一的单独字符") print(s) list1 = [0,1,2,3,4,3,2,1] s=set(list1) print("*"*40) print("一个由列表转换的集合,但是在列表中重复的元素只会出现一次") print(s)
请仔细理解,集合没有切片功能,这意味着什么,这意味着无法对它排序(当然可以转换成列表再排序),意味着无法用 while 循环配合下标依次获得元素,你可以用 for 循环获取。
len 函数返回集合的长度,即元素的个数。
map 函数对集合中的每个元素进行相同的操作,然后返回一个 map 对象,再使用 set 函数可以得到集合。
>>> a {'sdf', 'er'} >>> set(map(lambda x:x+"-",a)) {'er-', 'sdf-'}
filter 函数对集合中的每个元素进行相同的操作,符合条件的元素才留下来,返回一个 filter 类型的对象。
>>> a {'sdf', 'er'} >>> set(filter(lambda x:len(x)==2,a)) {'er'}
filter 函数依次对集合中的元素进行相同的迭代操作最后得到一个对象。
>>> import functools >>> a {'sdf', 'er'} >>> functools.reduce(lambda x,y:x+"~"+y,a) 'sdf~er'
sum 函数,只对元素是数值的集合有效,返回列表中的元素总和,如果元素类型不是数值,则返回 TypeError。
max 函数,返回集合中的元素最大值。
min 函数,返回集合中的元素最小值。
>>> a={1,2,3} >>> sum(a) 6 >>> min(a) 1 >>> max(a) 3 >>>
sorted 函数会对集合按照指定方式进行排序,请注意,使用 sorted 函数会得到一个排好序的列表,不是集合!!!原集合不会改变。
list1 = [0,1,2,3,4,3,2,1] s=set(list1) s1=sorted(s) print(s1) print(type(s1))
enumerate 函数可以将一个集合依次取出。
any() 函数用于判断给定的集合的所有元素是否都为 False,则返回 False,如果有一个为 True,则返回 True。
all() 函数用于判断给定的集合的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
.add(val) 方法附加一个元素 val,如果 val 已经在集合中,那么原来的集合不变化。
.clear() 方法将集合清空。
.copy() 方法将返回集合的拷贝(而不是和原来的列表共用同一个地址)。
difference() 方法用于返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二、三、N个集合(方法的参数)中。
difference_update() 方法用于移除两个或者多个集合中都存在的元素。
difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。
# 集合的使用 a={1,2,3,4,1} b={4,5,6,7} # 1.集合是不会有重复的元素的 print("1. ",a) # 2.集合使用 add 方法加一个元素 a.add("6") print("2. ",a) # 3.集合使用 clear 方法清空 a.clear() print("3. ",a) a={1,2,3,4} # 4.集合使用 copy 方法复制数据 c=a.copy() print("4. ",c) # 5.集合使用 difference 方法返回 # 和其他集合不一样的数据 print("5. ",a.difference(b)) # 6.集合使用 difference_update 方法删除 # 和其他集合一样的数据 # a={1,2,3,4} # b={4,5,6,7} a={1,2,3,4} b={4,5,6,7} print("6. ",a.difference_update(b)) print("6. ",a) a={1,2,3,4} c={1} a.difference_update(b,c) print("6. ",a) # 7.集合使用 discard 方法删掉数据 val a={1,2,3,4} a.discard(2) print("7. ",a)
.discard 方法删除集合中指定的元素。
.intersection 方法返回集合的交集,自身不受影响。
.intersection 方法原地改变自身为两个或者多个集合的交集。
>>> a={1,2,3,4,5} >>> b={2,3,4,5,6,7} >>> a.intersection(b) {2, 3, 4, 5} >>> a {1, 2, 3, 4, 5} >>> b {2, 3, 4, 5, 6, 7} >>> a.intersection_update(b) >>> a {2, 3, 4, 5} >>> b {2, 3, 4, 5, 6, 7}
.isdisjoint 方法判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
>>> a={1,2,3,4,5} >>> b={2,3,4,5,6,7} >>> c={"a","b"} >>> a.isdisjoint(b) False >>> a.isdisjoint(c) True
.issubset 方法判断自身集合是否为该方法参数集合 other_set 的子集。
>>> a={1,2,3,4,5} >>> b={2,3,4,5,6,7} >>> c={1} >>> a.issubset(b) False >>> a.issubset(c) False >>> c.issubset(a) True
.issuperset 方法判断该方法参数集合 other_set 是否为自身集合的子集。
>>> a={1,2,3,4,5} >>> b={2,3,4,5,6,7} >>> c={1} >>> a.issuperset(b) False >>> a.issuperset(c) True
.pop() 方法将返回集合中的一个元素,原集合将删除该元素。
请注意,集合中的 pop 方法是没有 index 参数!如果像使用列表中的 pop 方法输入 index 参数,则返回 TypeError: pop() takes no arguments (1 given) 错误。
.remove(val) 方法将删除集合中的 val 元素,返回为空。如果 val 不在集合中,则返回 KeyError 错误。
返回两个集合中不重复的元素集合,而不改变自身集合。
移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
# 10.集合使用 ^ 操作符返回 # 两个集合中不一样的数据 # 等同于 symmetric_difference方法 a={1,2,3,4} b={4,5,6,7} tmp=a^b print("10. ",tmp) print("a==>",a) print("b==>",b) print("使用 ^ 操作符 原来的集合不受影响") print("*"*60) print("a.symmetric_difference(b)==>",a.symmetric_difference(b)) print("a==>",a) print("b==>",b) print("使用 symmetric_difference方法 原来的集合不受影响") print("*"*60) print("a.symmetric_difference_update(b)==>",a.symmetric_difference_update(b)) print("使用 symmetric_difference_update 原来的集合会改变") print("a==>",a) print("b==>",b) print("*"*60)
.union 方法返回两个集合的并集,而不改变自身集合。
.update 方法给自身集合集合添加元素。
>>> a={0,1} >>> b={3,4} >>> c={5,6} >>> a.union(b) {0, 1, 3, 4} >>> a {0, 1} >>> b {3, 4} >>> a.update(b) >>> a {0, 1, 3, 4} >>> b {3, 4}
a 、b 是两个集合;a - b类似于 a.difference(b) 方法,即返回集合a中包含而集合b中不包含的元素,自身不受改变。
>>> a={0,1,2,3} >>> b={2,3,4,5} >>> a-b {0, 1} >>> a.difference(b) {0, 1}
a 、b 是两个集合;a | b类似于 a.union(b) 方法,即返回集合a和b中所有的元素,自身不受改变。
>>> a={0,1,2,3} >>> b={2,3,4,5} >>> a|b {0, 1, 2, 3, 4, 5} >>> a.union(b) {0, 1, 2, 3, 4, 5}
a 、b 是两个集合;a & b类似于 a.intersection(b) 方法,即返回集合a和b中都包含了的元素,自身不受改变。
# 9.集合使用 & 选出集合重叠的部分 # 等同于 insection 方法 a={1,2,3,4} b={4,5,6,7} print("********* 初始数据 ***********") print("a==>",a) print("b==>",b) print("8. a & b==>",a & b) print("执行 a & b 后") print("a==>",a) print("b==>",b) print("使用 & 操作符 原来的集合不受影响") print("*"*60) print("8. a.intersection(b)==>",a.intersection(b)) print("使用 intersection 方法 原来的集合不受影响") print("a==>",a) print("b==>",b) print("*"*60) print("8. a.intersection_update(b)==>",a.intersection_update(b)) print("使用 intersection_update 方法 原来的集合会改变") print("a==>",a) print("b==>",b) print("*"*60)
a 、b 是两个集合;a ^ b类似于 a.symmetric_difference(b) 方法,即返回不同时包含于a和b的元素,自身不受改变。
>>> a={0,1,2,3} >>> b={2,3,4,5} >>> a.symmetric_difference(b) {0, 1, 4, 5} >>> a^b {0, 1, 4, 5}
in 运算符判断某个元素属于某个集合
not in 运算符判断某个元素不属于某个集合
>>> a={0,1,2,3} >>> 0 in a True >>> "0" in a False