python中set函数_Python集Set

13 Set集

集Set的形式和字典很像,是无序集合,也是各个数据项用逗号间隔用花括号括起来,区别数据项不是一对儿,就是一个数据,且数据项的值不重复唯一。本章的这个Python数据类型真的和数学里的集非常相似,它既有基础的创建集合set、集合set添加、集合删除又有交集、并集、差集等操作。

13.1 创建集

创建一个集可以依据定义通过赋值来实现,也可用set函数来创建集。

s1 = {1, 5, "a", "hello"}

s2 = set("hello world")

s3 = set([1, 2, 1, 4, 3, 2])

print s1

print s2

print s3

程序执行结果:

set(['a', 1, 'hello', 5])

set([' ', 'e', 'd', 'h', 'l', 'o', 'r', 'w'])

set([1, 2, 3, 4])

这样的结果差强人意,不显著!但可以看出集里的各项数据是不重复的,例如在s2集里的l字母只有一个。所以有时有些程序用set来对某些集合类型实现去重。

13.2 集的增删

集是可以修改的,增加元素可以用add和update函数。删除可以用pop、discard、remove等函数。

(1) 增加集里的元素

add函数的参数视为一个整体插入到集里,而update函数传入的参数是把要传入的元素拆分,做为个体传入到集合中。

s = set("hello")

print s

s.add("a")

print s

s.add("e")

print s

s.add("python")

print s

s.update([1, 3, 4, "e"])

print s

程序执行结果:

set(['h', 'e', 'l', 'o'])

set(['a', 'h', 'e', 'l', 'o'])

set(['a', 'h', 'e', 'l', 'o'])

set(['a', 'e', 'python', 'h', 'l', 'o'])

set(['a', 1, 3, 'e', 'python', 'h', 'l', 'o', 4])

(2) 删除集里的元素

删除集合里的元素可以用pop函数,pop函数和列表的pop机制一样,随机删除一个返回值就是被删除的那个元素值,但如果集是空集用pop会报错异常。

s = set("hello")

print s

print "pop ->", s.pop()

print s

s = set()

print s

print s.pop()

程序执行结果如下:

set(['h', 'e', 'l', 'o'])

pop -> h

set(['e', 'l', 'o'])

set([])

Traceback (most recent call last):

File "test2.py", line 25, in

print s.pop()

KeyError: 'pop from an empty set'

异常的原因是集此时是空的。

discard函数可以删除集里某值,如果discard的参数值不属于集无任何操作。

s = set("hello")

print s

s.discard("o")

print s

s.discard("a")

print s

程序执行结果:

set(['h', 'e', 'l', 'o'])

set(['h', 'e', 'l'])

set(['h', 'e', 'l'])

remove函数和discard基本一样,区别在于函数的参数值不属于集时程序报错异常。

s = set("hello")

print s

s.remove("o")

print s

s.remove("a")

print s

程序执行结果:

set(['h', 'e', 'l', 'o'])

set(['h', 'e', 'l'])

Traceback (most recent call last):

File "test2.py", line 37, in

s.remove("a")

KeyError: 'a'

13.3 集的交集、并集、差集

交集:$A \cap B = ${$x | x \in A$ 且 $ x \in B$}。可以用&运算或者intersection函数

并集:$A \cup B = ${$ x | x \in A$ 或 $x \in B $}。可以用|运算符或者union函数。

差集: $A - B = ${$x \mid x \in A$ 且 $x \notin B $}。可用-运算符或者difference函数。

对称差集:$A \bigtriangleup B$ = {$x \mid x \in A \cup B$且 $x \notin A \cap B$}。求对称差集可用^运算符或者用 symmetric_difference或symmetric_difference_update函数。

s = {1, 2, 3}

t = {2, 4}

u = s | t

print u

i = s & t

print i

d = s - t

print d

d = s ^ t

print d

程序的执行结果如下:

set([1, 2, 3, 4])# 并集

set([2])# 交集

set([1, 3])# 差集

set([1, 3, 4])#对称差集

将运算符换作等价的函数,程序如下所示:

s = {1, 2, 3}

t = {2, 4}

u = s.union(t)#求并集

print u

i = s.intersection(t)#求交集

print i

d = s.difference(t)#求s和t的差集

print d

d = s.symmetric_difference(t)#求对称差集

print d

程序的执行结果是一样的。

13.4 集的遍历

尽管集是非有序的集合类型,但也是可以借助for来遍历集的各个数据项,这种方式有个学术名词叫迭代。

print "*****************"

s = set("hello the cruel world!")

print s

print "*****************"

for x in s:

print x

print "*****************"

程序执行结果如下所示:

*****************

set(['!', ' ', 'c', 'e', 'd', 'h', 'l', 'o', 'r', 'u', 't', 'w'])

*****************

!

c

e

d

h

l

o

r

u

t

w

*****************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值