python学习之集合(set)

一、列表,元组和集合。

列表(list)和元组(tuple)是标准的 Python 数据类型,它们将值存储在一个序列中。集合(set)是另一种标准的 Python 数据类型,它也可用于存储值。它们之间主要的区别在于,集合不同于列表或元组,集合中的每一个元素不能出现多次,并且是无序存储的。

我们可以利用集合的特性,进行去重操作,也可以很方便地进行并集,交集,差集或对称差等数学操作。

二、集合的初始化

集合是一个拥有确定(唯一)的、不变的的元素,且元素无序的可变的数据组织形式。

你可以使用「set()」操作初始化一个空集。

emptySet=set()
datascientist=set(['Python','C','SQl','vB','delphi'])
xs=set(['张明敏','曾艺潼','曾访平','曾艺潇','赵丽颖'])
print (datascientist)
print (xs)
View Code

 

 

 

观察一下代码和运行后的结果,您一定会发现,集合里的顺序是不同的。这是因为python语言中,集合是无序的。

集合包含的值也可以通过花括号来初始化。

请牢记,花括号只能用于初始化包含值的集合。如下图所示,使用不包含值的花括号是初始化字典(dict)的方法之一,而不是初始化集合的方法。

1 #初始化空集合
2 emptySet=set()
3 
4 #初始化空字典
5 emptyDict=dict()
6 emptyDict={}

三、从集合中添加值或删除值

1、你可以使用「add」方法向集合中添加一个值。

你只能将一个不变的值添加到集合中,如一个字符串或是一个元组。假如你将一个列表添加到集合中的话,系统会返回类型错误的。因为列表是一个可变的。

 1 xs.add('钱学森') 

2、有好几种方法可以从集合中删除一个值:

选项 1:你可以使用「remove」方法从集合中删除一个值。

 1 xs.remove('钱学森') 

用remove方法删除集合中的元素不好的地方是,如果指定删除的元素不存在的话,就会产生键值错误。

选项 2:你可以使用「discard」方法,从集合中删除一个值。

这种方法相对于「remove」方法的好处是,如果你试图删除一个集合中不存在的值,系统不会返回「KeyError」。如果你熟悉字典(dict)数据结构,你可能会发现这种方法与字典的「get」方法的工作模式相似。

选项 3:你还可以使用「pop」方法从集合中删除并且返回一个任意的值。

需要注意的是,如果集合是空的,该方法会返回一个「KeyError」。

选项4:你可以使用「clear」方法删除集合中所有的值。
xs.clear()

四、在集合上进行迭代

1 #初始化一个集合
2 xs={'张明敏','曾艺潼','曾访平','曾艺潇','赵丽颖'}
3 
4 for skill in xs:
5     print(skill)

如果你仔细观察「xs」集合中打印出来的每一个值,你会发现集合中的值被打印出来的顺序与它们被添加的顺序是不同的。

五、将集合中的元素变得有序

前面已经多次重申,集合是无序的。如果你要以有序的形式从集合中取出值,你可以用“sorted”函数,他会输出一个有序的列表。

1 #初始化一个集合
2 xs={'张明敏','曾艺潼','曾访平','曾艺潇','赵丽颖'}
3 
4 xs1=sorted(xs,reverse=True)
5 for skill in xs1:
6     print(skill)

你会发现,通过排序产生的列表xs1是通过字母降序(z--->a)排列的。

六,删除列表中的重复项

 1 print(list(set([1, 2, 3, 1, 7]))) 

七、集合的各种运算方法

 1 #初始化二个集合
 2 cj1={1,2,3,4,5,6}
 3 cj2={5,6,7,8,9,0}
 4 
 5 #求并集用union方法,或者用&
 6 cj=cj1.union(cj2)
 7 print ("求并集后的结果是:")
 8 print(cj)
 9 
10 #求交集用intersection方法,或者用|
11 cj=cj1.intersection(cj2)
12 print ("求交集后的结果是:")
13 print(cj)
14 
15 #求差集用difference方法,或者用-
16 cj=cj1.difference(cj2)
17 print ("求差集后的结果是:")
18 print(cj)
19 
20 #求对称集用^符号
21 cj=cj1^cj2
22 print ("求对称集后的结果是:")
23 print(cj)
24 print (type(cj))

运行后的结果为:

 

待续。。。。。。 

 

posted @ 2020-02-03 12:17  奔腾的小河  阅读(653)  评论(0编辑  收藏  举报