Pyhton set集合
set 是一个不允许内容重复的组合,而且set里的内容位置是无序的,所以不能用索引列出。可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
注:
【1】Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:{element1,element2,…,elementn}。
【2】set对字符串也会去重,因为字符串属于序列。
【3】特点:
(1) 无序性:set 集合是无序的,所以每次输出时元素的排序顺序可能都不相同。
(2) 确定性
(3) 不重复性
【4】 从内容上看,同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误。
#1.set对字符串也会去重,因为字符串属于序列。 str1 = set("abcdefgabcdefghi") str2 = set("abcdefgabcdefgh") print(str1,str2) print(str1 - str2) #-号可以求差集 print(str2-str1) #空值 #print(str1+str2) #set里不能使用+号 ==================================================================== {'d', 'i', 'e', 'f', 'a', 'g', 'b', 'h', 'c'} {'d', 'e', 'f', 'a', 'g', 'b', 'h', 'c'} {'i'} set()
【5】set增删查改操作
#1.给set集合增加数据 person ={"student","teacher","babe",123,321,123} person.add("student") #如果元素已经存在,则不报错,也不会添加,不会将字符串拆分成多个元素,去别update print(person) person.add((1,23,"hello")) #可以添加元组,但不能是list print(person) ''' {321, 'babe', 'teacher', 'student', 123} {(1, 23, 'hello'), 321, 'babe', 'teacher', 'student', 123} ''' person.update((1,3)) #可以使用update添加一些元组列表,字典等。但不能是字符串,否则会拆分 print(person) person.update("abc")#也是增加元素 print(person) #会将字符串拆分成a,b,c三个元素 ''' {321, 1, 3, 'teacher', (1, 23, 'hello'), 'babe', 'student', 123} {321, 1, 3, 'b', 'c', 'teacher', (1, 23, 'hello'), 'a', 'babe', 'student', 123} ''' #2.从set里删除数据 person.remove("student")#按元素去删除 print(person) #print("student")如果不存在 ,会报错。 ''' {321, 1, 3, 'c', 'b', (1, 23, 'hello'), 'teacher', 'babe', 'a', 123} ''' person.discard("student")#功能和remove一样,好处是没有的话,不会报错 person.pop() #在list里默认删除最后一个,在set里随机删除一个。 print(person) ''' {1, 3, (1, 23, 'hello'), 'teacher', 'b', 'a', 'babe', 123, 'c'} ''' #3.更新set中某个元素,因为是无序的,所以不能用角标 #所以一般更新都是使用remove,然后在add #4.查询是否存在,无法返回索引,使用in判断 if "teacher" in person: print("true") else: print("不存在") ''' true ''' #5.终极大招:直接清空set print(person) person.clear() print(person) ''' set() '''
1、创建一个新的空集
要创建一个空集,你必须使用 set(),而不是 {};后者创建了一个空字典。
创建一个空字典:
print("Create a new set:") x = set() print(x) print(type(x)) ''' Create a new set: set() <class 'set'> '''
创建一个非空字典:
print("Create a non empty set:") n = set([0, 1, 2, 3, 4]) print(n) print(type(n)) ''' Create a non empty set: {0, 1, 2, 3, 4} <class 'set'> '''
print("Using a literal:") a = {1,2,3,'foo','bar'} print(type(a)) print(a) ''' Using a literal: <class 'set'> {1, 2, 3, 'bar', 'foo'} '''
2、迭代集合
编写一个 Python 程序来迭代集合。
【1】循环访问不带索引的集合
字符串是无序的:
char_set = set("abcdefg") for val in char_set: print(val, end=' ') #e f d c a b g (无序的)
set里面的列表是有序的:
num_set = set([0, 1, 2, 3, 4, 5]) for n in num_set: print(n, end=' ') print(type(num_set)) # 0 1 2 3 4 5 <class 'set'>
【2】循环访问带索引的集合
char_set = set("abcdefg") print(char_set) char_set = list(char_set) print(char_set) for id in range(len(char_set)): print(char_set[id], end=' ') ''' {'b', 'e', 'c', 'd', 'f', 'a', 'g'} ['b', 'e', 'c', 'd', 'f', 'a', 'g'] b e c d f a g '''
3、在集合中添加成员
【1】add
1、添加元素
2、可以添加元组,但不能是list
3、如果元素已经存在,则不报错,也不会添加,不会将字符串拆分成多个元素,区别于update
【2】update
1、可以使用update添加一些元组列表,字典等。但不能是字符串,否则会拆分
#空集合 color_set = set() print(color_set) print("add添加一个元素:") color_set.add("Red") print(color_set) print("可以使用update添加一些元组、列表、字典等:") color_set.update(["Blue", "Green"]) print(color_set)# 但使用update添加字符串会进行拆分 ''' set() add添加一个元素: {'Red'} 可以使用update添加一些元组、列表、字典等: {'Red', 'Green', 'Blue'} '''
4、从 Python 集中删除成员
编写一个 Python 程序以从给定集合中删除项目。
【1】remove
【2】pop
【3】discard
#从set里删除数据 person.remove("student")#按元素去删除 print(person) #print("student")如果不存在 ,会报错。 ''' {321, 1, 3, 'c', 'b', (1, 23, 'hello'), 'teacher', 'babe', 'a', 123} ''' person.discard("student")#功能和remove一样,好处是没有的话,不会报错 person.pop() #在list里默认删除最后一个,在set里随机删除一个。 print(person) ''' {1, 3, (1, 23, 'hello'), 'teacher', 'b', 'a', 'babe', 123, 'c'} '''
5、存在则从该集合中删除该成员
编写一个 Python 程序,以从集合中删除某个项(如果该集合中存在该项)。
分析:也就是集合中没有此元素的时候,删除不会报错,使用函数discard
#Create a new set num_set = set([1, 2, 3, 4, 5, 6]) print("Original set elements:") print(num_set) print("\nRemove 4 from the said set:") num_set.discard(4)#将元素4删除 print(num_set) print("\nRemove 5 from the said set:") num_set.discard(5)#将元素5删除 print(num_set) print("\nRemove 15 from the said set:") num_set.discard(15) print(num_set)# 不会报错 ''' Original set elements: {1, 2, 3, 4, 5, 6} Remove 4 from the said set: {1, 2, 3, 5, 6} Remove 5 from the said set: {1, 2, 3, 6} Remove 15 from the said set: {1, 2, 3, 6 '''
6、集合的交集
setx = set(["green", "blue"]) sety = set(["blue", "yellow"]) print("Original set elements:") print(setx) print(sety) print("\nIntersection of two said sets:") setz = setx & sety print(setz) ''' Original set elements: {'green', 'blue'} {'blue', 'yellow'} Intersection of two said sets: {'blue'} '''
7、集合的并集
setc1 = set(["green", "blue"]) setc2 = set(["blue", "yellow"]) setc = setc1.union(setc2) print("\nUnion of above sets:") print(setc) setn1 = set([1, 1, 2, 3, 4, 5]) setn2 = set([1, 5, 6, 7, 8, 9]) print("\nUnion of above sets:") setn = setn1.union(setn2) print(setn) ''' Union of above sets: {'green', 'blue', 'yellow'} Union of above sets: {1, 2, 3, 4, 5, 6, 7, 8, 9} '''
8、创建集合差异
方法一:使用difference
函数
setc1 = set(["green", "blue"]) setc2 = set(["blue", "yellow"]) r1 = setc1.difference(setc2) print("\nDifference of setc1 - setc2:") print(r1) r2 = setc2.difference(setc1) print("\nDifference of setc2 - setc1:") print(r2) ''' Difference of setc1 - setc2: {'green'} Difference of setc2 - setc1: {'yellow'} '''
方法二:使用减号
setc1 = set(["green", "blue"]) setc2 = set(["blue", "yellow"]) r1 = setc1 - setc2 print("\nDifference of setc1 - setc2:") print(r1) r2 = setc2 - setc1 print("\nDifference of setc2 - setc1:") print(r2) ''' Difference of setc1 - setc2: {'green'} Difference of setc2 - setc1: {'yellow'} '''
方法三:差分() 方法中的多个集合
setn1 = set([1, 1, 2, 3, 4, 5]) setn2 = set([1, 5, 6, 7, 8, 9]) setn3 = set([3, 4, 5, 3, 9, 10]) setn4 = set([5, 7, 9, 10, 12, 14]) print("\nDifference of setn1 - setn2,setn3,setn4:") r1 = setn1.difference(setn2,setn3,setn4) print(r1) print("\nDifference of setn4 - setn1,setn2,setn3:") r2 = setn4.difference(setn1,setn2,setn3) print(r2) ''' Difference of setn1 - setn2,setn3,setn4: {2} Difference of setn4 - setn1,setn2,setn3: {12, 14} '''