自学Python-基本数据结构(3)

集合(set)

回顾

在之前学习的数据类型中:

能够索引的,如list/str,其中的元素可以重复
可变的,如list/dict,即其中的元素/键值对可以原地修改
不可变的,如str/int,即不能进行原地修改
无索引序列的,如dict,即其中的元素(键值对)没有排列顺序

现在要介绍另外一种类型的数据,英文是set,翻译过来叫做“集合”。它的特点是:有的可变,有的不可变;元素无次序,不可重复。


创建set

set是无序的,不可重复,可以原处修改的数据类型

使用set创建

1
2
set1 = set("carll")
print "set1 is " + str(set1)

通过set创建,’l’只有一个,并且元素顺序被打乱

使用frozenset创建

1
2
3
fset = frozenset("carl")
print fset
#fset.add("hello") #报错,不可修改所以没有add方法

set 创建的集合是可以原处修改的
frozenset 创建的集合是不可以原处修改的

使用 “{}” 创建

1
2
set2 = {"hello","world",123,"!","!"}
print "set2 is " + str(set2)

使用{}创建,不建议使用,python有时会分不清是set还是dict

集合和列表装换

list() 和 set() 可以实现两种数据互相转换

1
2
3
4
5
alis = list(set1)
alis.append("l")
print alis
set3 = set(alis)
print set3

可以发现,转换成集合以后,就没有重复的元素了


集合的方法

增加(add、uodate)

1
2
3
4
set3.add("hello")  #增加一个元素,原处修改
print set3
set3.update(set2) #将set2合并到set3中
print set3

add添加一个元素
update合并一个集合

删除(pop、remove、discard)

1
2
3
4
5
print set3.pop()
print set3.remove("hello")
print set3
print set3.discard("world")
print set3

pop,任意删除并返回删除的元素,不能指定元素,set为空将报错

remove,返回None证明remove无返回 如果元素不存在则报错

discard,返回None证明discard无返回,如果元素存在就删除,如果不在就什么也不做

清空(clear)

1
2
set3.clear()
print set3

clear,清空集合


集合运算

判断元素是否属于集合(in)

1
2
print "c in fset?\t" + str("c" in fset)
print "d in fset?\t" + str("d" in fset)

判断是否为子集或超集(<、issubset;>、issuperset)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
print "set3 是 fset的子集?\t" + str(set3 < fset)
print "set3 是 fset的子集?\t" + str(set3.issubset(fset))
print "set3 是 fset的超集?\t" + str(set3 > fset)
print "set3 是 fset的超集?\t" + str(set3.issuperset(fset))
```

### 判断集合元素是否一样(==、!=)
```python
set3.add("a")
set3.add("r")
print "set3 == fset?\t" + str(set3 == fset)
set3.add("l")
print "set3 != fset?\t" + str(set3 != fset)
```

### 两集合的并集(|、union)
```python
set4 = set3 | set2
print set4
set4.clear()
set4 = set3.union(set1)
print set4

两集合的交集(&、intersection)

1
2
print set4 & set3
print set4.intersection(set3)

差(-、difference)

前集合相对后集合不同的地方

1
2
print set2 - set4
print set2.difference(set4)

对称差(symmetric_difference)

并集之外的元素

1
2
3
print "set3 is\t" + str(set3)
print "set2 is\t" + str(set2)
print set3.symmetric_difference(set2)

自学Python-基本数据结构(3)
https://carl-5535.github.io/2020/11/09/自学python/自学Python-基本数据结构-3/
作者
Carl Chen
发布于
2020年11月9日
许可协议