Python中一种数据类型,叫集合,它是用花括号括起来的一组数据,每个数据之间用逗号隔开,集合是一种无序的序列,它的元素没有index值。
1.集合的创建
①集合可以用花括号直接创建,例如
s = {1, 2, 3, 4, 5, 5, 6, 6, 7}
print(s, type(s))
运行结果如下:
{1, 2, 3, 4, 5, 6, 7} <class 'set'>
通过观察我们可以看出来,我们在创建的时候花括号里是两个数字5,两个数字6,但是运行结果都是一个,这是因为集合中是不允许重复元素。
②使用内置函数set()创建,如下是用set()函数来创建集合:
s1 = set([1, 2, 3, 4, 5, 6, 8, 8, 9, 10]) # 把数据用方括号[]括起来
print(s1, type(s1)) # 运行结果-> {1, 2, 3, 4, 5, 6, 8, 9, 10} <class 'set'>
s2 = set((1, 2, 4, 5, 65)) # 把数据用圆括号()括起来
print(s2, type(s2)) # 运行结果-> {65, 1, 2, 4, 5} <class 'set'>
s3 = set({12, 15, 64, 98}) # 把数据用花括号{}括起来
print(s3, type(s3)) # 运行结果-> {64, 98, 12, 15} <class 'set'>
通过观察我们可以看到,创建集合时把数据用方括号或圆括号或花括号括起来都可以创建成功,另外我们还可以看到运行结果得到的数据顺序与我们创建时候的顺序是不一样的,这是因为在Python中集合是无序的序列,它里面的元素位置是随机的,我们每运行一次,得到的结果中的顺序也是不一样的。
如果我们创建集合时没有用方括号或圆括号或花括号把数据括起来,运行会报错,如下代码:
s1 = set(1, 2, 3, 4, 5, 6, 8, 8, 9, 10)
print(s1, type(s1))
运行报错:TypeError: set expected at most 1 argument, got 10
如果在set()中单独放一个字符串,程序会把字符串拆分,产生一组序列形成集合,如下代码:
s4 = set('Python')
print(s4, type(s4))
运行结果如下:
{'n', 'P', 'h', 'y', 't', 'o'} <class 'set'>
从以上的结果中我们更能看出来集合的无序性。
③如果要创建空集合只能用set()函数,不能直接用{}创建,因为直接用花括号创建出来是字典,如下代码示例:
s6 = {}
print(s6, type(s6)) # 运行结果-> {} <class 'dict'>
s7 = set()
print(s7, type(s7)) # 运行结果-> set() <class 'set'>
2.集合的增、删操作
(1)集合的增加元素操作
集合增加元素可以采用add()方法增加一个元素,也可以使用update()方法增加至少一个元素,如下代码示例:
s = {"Python", "JavaScript", "C++"} # 先创建一个集合
s.add("Hello") # add()方法 一次只能添加一个元素,否则会报错
print(s) # 运行结果:{'C++', 'Hello', 'JavaScript', 'Python'}
s.update({"World", "PHP"}) # 一次至少添加一个元素,此处花括号可以改成圆括号或方括号
print(s) # 运行结果:{'Hello', 'World', 'JavaScript', 'C++', 'PHP', 'Python'}
(2)集合的删除操作
集合的删除操作有pop()方法和remove()方法,discard()方法以及clear()方法。
①使用pop()方法会随机删除一个元素,不能指定元素;如下代码:
s = {"Python", "JavaScript", "C++"} # 先创建一个集合
s.pop() # 随机删除一个元素
print(s)
# 第一次运行结果:{'JavaScript', 'Python'}
# 第二次运行结果:{'Python', 'C++'}
从以上观察可以看到,两次运行出来的结果是不一样的,说明pop()方法的随机性。
②用remove()方法可以指定删除的元素,如果该元素不存在会报错,如下代码:
s = {"Python", "JavaScript", "C++"} # 先创建一个集合
s.remove('C++') # 指定删除的元素'C++'
print(s) # 运行结果:{'JavaScript', 'Python'}
s1 = {"Python", "JavaScript", "C++"} # 先创建一个集合
s1.remove('PHP') # 指定一个不存在元素'PHP'
print(s1) # 运行报错:KeyError: 'PHP'
③用discard()方法可以指定删除的元素,如果该元素不存在不会报错,如下代码:
s = {"Python", "JavaScript", "C++"} # 先创建一个集合
s.discard('C++') # 指定删除的元素'C++'
print(s) # 运行结果:{'JavaScript', 'Python'}
s1 = {"Python", "JavaScript", "C++"} # 先创建一个集合
s1.discard('PHP') # 指定一个不存在元素'PHP'
print(s1) # 运行不会报错,直接返回原来的元组数据:{'C++', 'Python', 'JavaScript'}
④用clear()方法会清空整个集合的所有元素:
s = {"Python", "JavaScript", "C++"} # 先创建一个集合
s.clear()
print(s) # 运行结果:set()
(3)集合没有改的操作
集合没有办法直接更改某个元素,例如想把集合{“Python”,"JavaScript","C++"}中的“C++”改成“PHP”是无法直接更改的,如果我们要更改可以先用remove()方法把“C++”删除,然后再用add()方法把“PHP”添加到集合中,如下代码:
s = {"Python", "JavaScript", "C++"} # 先创建一个集合
s.remove("C++") # 删除"C++"元素
s.add("PHP") # 添加"PHP"元素
print(s) # 运行结果:{'Python', 'PHP', 'JavaScript'}
3.集合的遍历
集合无法单独提取出来其中的指定元素,但是集合可以用for循环进行遍历:
s = {"Python", "JavaScript", "C++"}
for i in s:
print(i)
运行结果为:
JavaScript
C++
Python
4.集合的判断操作
可以判断某个元素在集合中是否存在,如下代码:
s = {10, 20, 30, 40, 50}
print(10 in s) # 10是在集合s中吗?运行结果:True
print(100 in s) # 100是在集合s中吗?运行结果:False
print(10 not in s) # 10不在集合s中吗?运行结果:False
print(100 not in s) # 100不在集合s中吗?运行结果:True
5.统计集合中元素的数量
集合可以通过len()函数计算集合的长度,即集合中元素的数量,如下代码:
s = {"Python", "JavaScript", "C++"}
print(len(s)) # 运行结果:3
6.集合的差集、交集、并集操作
两个集合之间可以进行差集、交集、并集的相关操作:
intersection()方法可以将两个集合的交集作为新集合返回,即集合s1和集合s2中都有的共同元素,如下代码:
s1 = {'小红', '小橙', '小黄', '小绿'}
s2 = {'小绿', '小青', '小紫', '小黑'}
# 以上两个集合都有一个共同的元素'小绿'
print(s1.intersection(s2)) #求取两个集合的交集,运行结果:{'小绿'}
difference()方法可以将两个或多个集合的差值作为新集合返回,即将集合s1中的与集合s2或集合s3都有交集的对象删除,返回新的集合,如下代码:
s1 = {'小红', '小橙', '小黄', '小绿'}
s2 = {'小绿', '小青', '小紫', '小黑'}
s3 = {'小红','小白'}
# 以上s1和s2集合有一个共同的元素'小绿',s1和s3集合有个共同元素'小红'
print(s1.difference(s2)) # 运行结果:{'小黄', '小红', '小橙'}
print(s1.difference(s2,s3)) # 运行结果:{'小黄', '小橙'}
symmetric_difference()方法可以将两个集合的对称差作为一个新的集合返回,即将集合s1和s2中交集的部分删除后合并起来形成新的集合,如下代码:
s1 = {'小红', '小橙', '小黄', '小绿'}
s2 = {'小绿', '小青', '小紫', '小黑'}
print(s1.symmetric_difference(s2)) # 运行结果:{'小红', '小黑', '小黄', '小橙', '小紫', '小青'}
union()方法可以将集合的并集作为新集合返回,即将集合s1和s2中所有的元素合并一起,形成一个新的集合,如下代码:
s1 = {'小红', '小橙', '小黄', '小绿'}
s2 = {'小绿', '小青', '小紫', '小黑'}
print(s1.union(s2)) #运行结果:{'小红', '小绿', '小黑', '小黄', '小橙', '小紫', '小青'}
union()方法和update()方法运行后得到的结果相同,区别在于 union()方法是产生一个新的集合来存放合并后的所有元素,原来的两个集合是没有发生改变的;update()方法是修改更新了其中一个集合,比如s1.update(s2)代码会更新s1集合,s2集合不改变。如下代码所示:
s1 = {'小红', '小橙', '小黄', '小绿'}
s2 = {'小绿', '小青', '小紫', '小黑'}
s1.update(s2)
print(s1) #s1集合发生了变化,运行结果:{'小橙', '小紫', '小红', '小黑', '小绿', '小青', '小黄'}
print(s2) #s2集合没有变化,运行结果:{'小青', '小黑', '小紫', '小绿'}
7.总结
以上就是Python中集合的相关基础操作,我们在实际应用中会用到,尤其是集合的交集、并集、差集等相关操作,比如,两个商家售卖的产品上百种产品,我们想要统计两个商家售卖的同类产品有多少个,就可以用集合中交集的操作,拿到数据后就可以再进行后续的数据分析了。
如果想了解Python中其他数据类型的相关基础操作,请详见本人的其他文章: