python计算集合并集的运算符_无序的集合:Python中的数学集合运算

原标题:无序的集合:Python中的数学集合运算

全文共 8958字,预计学习时长 23分钟

set是Python中无序的集合,它可以用于计算标准数学运算,例如交集、并集、差集和对称差集,Other集合(例如列表、元组和字典)不支持集合操作,Dict视图对象类似于集合,可以进行集合操作。本文将详细探讨set对象支持的数学运算。

先来看一下Set对象支持的数学运算:

· union

· update

· intersection

· intersection_update

· difference

· difference_update

· symmetric_difference

· symmetric_difference_update

· isdisjoint

· issubset

· issuperset

Set运算操作可以通过两种方式完成:使用方法或运算符。

‘union’

返回一个新集合,其中包含该set和other集合中的元素,使用union或“|“算子。

语法:

union(*others)set| other | ...

示例1:找到两个集合的并集—A和B

返回一个包含集合A和集合B中的元素的新集合。但元素不会重复,集合中的所有元素都是唯一的。

A={1,2,3,4,5}B={2,4,6,8}print (A.union(B)) #Output:{1, 2, 3, 4, 5, 6, 8}print (A|B) #Output:{1, 2, 3, 4, 5, 6, 8}

示例2:查找两个以上集合的并集

A={1,2,3,4,5}B={2,4,6,8,10}C={1,3,5,7,9}print (A|B|C) #Output:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}print (A.union(B,C)) #Output:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

union方法和|之间的区别:

· union:接受任何可迭代的参数

· |运算符:仅接受set作为参数,否则将引发TypeError。

示例3:在union方法中将iterable用作参数

A={1,2,3,4,5}#iterable is given as listprint(A.union([2,4,6])) #Output:{1, 2, 3, 4, 5, 6}

#iterable is given as tupleprint(A.union((2,4,6))) #Output:{1, 2, 3, 4, 5, 6}

#iterable is given as range objectprint(A.union(range(5,10))) #Output:{1, 2, 3, 4, 5, 6, 7, 8, 9}

#iterable is given as a dictionaryprint(A.union({ a:6, b:7})) #Output:{1, 2, 3, 4, 5, b , a }

示例4:为|提供参数iterable

A={1,2,3,4,5}B=[1,2,3]print (A|B)#Output:TypeError: unsupported operand type(s) for|: setand list

‘update’

更新集合,并从other集合中添加元素,元素不会重复,集合中的所有元素都是唯一的。通过使用update 或使用|=运算符来执行,返回类型为None,将修改原始集本身。

语法:

update(*others)set|= other | ...

示例1:在A和B两个集合之间调用update

通过添加两个集合中的元素来更新集合A。

#updateA={1,2,3,4,5}B={4,5,6,7,8}print (A.update(B)) #Output: Noneprint (A) #Output: {1, 2, 3, 4, 5, 6, 7, 8}A={1,2,3,4,5}B={4,5,6,7,8}A|=Bprint (A) #Output: {1, 2, 3, 4, 5, 6, 7, 8}

示例2:在两个以上集合之间调用update

#updateA={1,2,3}B={3,4,5}C={5,6,7}print (A.update(B,C)) #Output: Noneprint (A) #Output: {1, 2, 3, 4, 5, 6, 7}

A={1,2,3}B={3,4,5}C={5,6,7}A|=B|Cprint (A) #Output: {1, 2, 3, 4, 5, 6, 7}

update 方法和|=运算符之间的区别:

· update :接受任何可迭代的参数。

· =运算符:仅接受set作为参数,否则将引发TypeError。

示例3:在update 方法中将iterable用作参数

A={1,2,3}#iterable is given as listprint (A.update([2,3,4])) #Output:Noneprint (A) #Output:{1,2,3,4}

#iterable is given as tupleA={1,2,3}A.update((2,3,4))print (A) #Output:{1,2,3,4}

#iterable is given as range objectA={1,2,3}A.update(range(2,5))print (A) #Output:{1,2,3,4}

#iterable is given as a dictionaryA={1,2,3}A.update({2: a ,3: b })print (A) #Output:{1, 2, 3}

示例4:为|=运算符提供参数iterable:

#iterable is given as tupleA={1,2,3}B=(3,4)A|=B#Output:TypeError: unsupported operand type(s) for|=: setand tuple

‘intersection’

返回一个具有该集合和other集合共同元素的新集合,通过intersection或使用&运算符来执行。

语法:

intersection(*others)set& other & ...

示例1:找到两个集合的交集—A和B

返回一个新集合,其中包含集合A和集合B中的共同元素。

A={1,2,3,4,5}B={2,4,6,8}#intersection is performed by intersection method or & operatorprint (A.intersection(B)) #Output:{2,4}print (A&B) #Output:{2,4}

示例2:找到两个以上的交集

A={1,2,3,4,5}B={2,4,6,8,10}C={2,4}print (A&B&C) #Output:{2,4}print (A.intersection(B,C)) #Output:{2,4}

intersection方法和&运算符之间的区别:

· intersection:接受任何可迭代的参数。

· &运算符:仅接受set参数,否则将引发TypeError。

示例3:在intersection方法中将iterable用作参数

A={1,2,3,4,5}#iterable is given as listprint(A.intersection([1,4,6])) #Output:{1,4}

#iterable is given as tupleprint(A.intersection((2,4,6))) #Output:{2,4}

#iterable is given as range objectprint(A.intersection(range(5,10))) #Output:{5}

#iterable is given as a dictionaryprint(A.intersection({1: a, b:7})) #Output:{1}

示例4:为&运算符提供参数iterable

A={1,2,3,4,5}B=[1,2,3]print (A&B)#Output:TypeError: unsupported operand type(s) for&: setand list

‘intersection_update’

更新集合,只保留集合和other中共同的元素。可以通过使用 intersection_update或使用&=运算符来执行,返回类型为None,将修改原始集本身。

语法:

intersection_update(*others)set&= other & …

示例1:找到两个集合A和B之间的 intersection_update

通过仅保留在两个集合中找到的元素来更新集合A。

#intersection_updateA={1,2,3,4,5}B={4,5,6,7,8}print (A.intersection_update(B)) #Output: Noneprint (A) #Output: {4,5}A={1,2,3,4,5}B={4,5,6,7,8}A&=Bprint (A) #Output: {4,5}

‘difference’

返回一个去除other中元素之后的新集合,通过difference 或使用-运算符来执行。

语法:

difference(*others)set- other - ...

示例1:找出A和B两组之间的差异

返回一个新集合,其中包含在集合A而不在集合B中的元素。

A={1,2,3,4,5}B={2,4,6,8}print (A.difference(B)) #Output:{1,3,5}print (A-B) #Output:{1,3,5}

示例2:找出两个以上集合之间的差异

A={1,2,3,4,5}B={2,4,6,8,10}C={2,3}print (A-B-C) #Output:{1,5}print (A.difference(B,C)) #Output:{1,5}

difference方法和-运算符之间的区别:

· difference:接受任何可迭代的参数

· -运算符:仅接受set作为参数。否则将引发TypeError。

示例3:在difference方法中将iterable作为参数

A={1,2,3,4,5}#iterable is given as listprint(A.difference([1,2,3])) #Output:{4,5}

#iterable is given as tupleprint(A.difference((1,2,3))) #Output:{4,5}

#iterable is given as range objectprint(A.difference(range(1,4))) #Output:{4,5}

#iterable is given as a dictionaryprint(A.difference({1: a,2: b,3: c})) #Output:{4,5}

示例4:为-运算符提供参数iterable

A={1,2,3,4,5}B=[1,2,3]print (A-B)#Output:TypeError: unsupported operand type(s) for-: setand list

‘difference_update’

从other集合中删除该集合中的元素,通过使用-= 运算符或使用difference_update 方法来执行,返回类型为None,将修改原始集本身。

句法:

difference_update(*others)set-= other | ...

示例1:找到两个集合A和B之间的difference_update

通过删除集合A和集合B中都存在的元素来更新集合A。

A={1,2,3,4,5}B={2,4,6}#Return type is None.print (A.difference_update(B)) #Output:None#It will update the original setprint (A) #Output: {1,3,5}

# difference_update by using -= operatorA-=(B)print (A) #Output: {1,3,5}

示例2:查找两个以上集合之间的difference_update

#difference_update will modify the original set.A={1,2,3}B={1}C={2}#Return type is None.print (A.difference_update(B,C)) #Output:None#It will update the original setprint (A) #Output: {3}

# difference_update by using -= operatorA={1,2,3}B={1}C={2}A-=B|Cprint (A) #Output: {3}

difference_update方法与-=运算符的区别:

· difference_update:接受任何可迭代的参数

· -=运算符:仅接受set参数,否则将引发TypeError。

示例3:在difference_update方法中将iterable作为参数

#iterable is given as listA={1,2,3}B=[1]print (A.difference_update(B)) #Output:Noneprint (A) #Output:{2,3}

示例4:为-=运算符提供参数iterable

A={1,2,3}B=[1]A-=Bprint (A)#Output: TypeError: unsupported operand type(s) for-=: setand list

‘symmetric_difference’

返回一个新集合,该集合中的元素属于集合或other,但不包含两个集合共有的元素。通过symmetric_difference或使用^运算符来执行。

语法:

symmetric_difference(other)set^ other

示例1:找到A和B两组之间的对称差

返回一个新集合,其中包含来自集合A和集合B的元素,但不包含两个集合中共同的元素。

A={1,2}B={2,3}print (A.symmetric_difference(B)) #Output:{1,3}print (A^B) #Output:{1,3}

示例2:对称差集仅适用于2个集合

多个集合不支持symmetric_difference方法,如果给出两个以上的集合,则会引发TypeError。

A={1,2}B={2,3,5}C={3,4}print (A.symmetric_difference(B,C)) #Output:TypeError:symmetric_difference takes exactly one argument (2 given)

但是我们可以使用^找到多个集合的对称差集:

A={1,2}B={2,3,5}C={3,4}

print (A^B^C) #Output:{1,4,5}

symmetric_difference方法和^运算符之间的区别:

· symmetric_difference:接受任何可迭代的参数,但此方法不允许使用多个集合。

· ^运算符:它将仅接受set作为参数。否则,将引发TypeError。通过使用^运算符,可以找到多个集合之间的对称差集。

示例3:在symmetric_difference方法中将iterable作为参数

#iterable is given as listA={1,2,3}B=[1]print (A.symmetric_difference(B)) #Output:{2,3}

#iterable is given as tupleA={1,2,3}B=(1,)print (A.symmetric_difference(B)) #Output:{2,3}

#iterable is given as range objectA={1,2,3}B=range(2)print (A.symmetric_difference(B)) #Output:{2,3}

示例4:为^运算符提供参数iterable:

A={ 1, 2, 3}B=[ 1]A^Bprint (A) #Output: TypeError: unsupported operand type(s) for^: setand list

‘symmetric_difference_update’

更新集合,保留在两个集合中均找到的元素并去除两个集合中的公共元素。可以通过使用symmetric_difference_update或使用^=运算符来实现,返回类型为None,将修改原始集本身。

语法:

symmetric_difference_update(other)set^= other

示例1:在A和B两组之间找到symmetric_difference_update

将通过仅保留能在任一集合中找到,但不在两个集合中同时出现的元素来更新集合A。

#symmetric_difference_updateA={1,2,3,4,5}B={4,5,6,7,8}print (A.symmetric_difference_update(B)) #Output: Noneprint (A) #Output: {1, 2, 3, 6, 7, 8}

A={1,2,3,4,5}B={4,5,6,7,8}A^=Bprint (A) #Output: {1, 2, 3, 6, 7, 8}

‘isdisjoint’

如果该集合没有共同元素,则返回True。当且仅当它们的交集为空集时,这时称集合之间无连接。

语法:

isdisjoint(other)

示例:

#Set A and Set B containing common elementsA={1,2,3,4,5}B={4,5,6,7,8}print (A.isdisjoint(B)) #Output:False

#Set A and Set B not containing common elementsA={1,2}B={3,4}print (A.isdisjoint(B)) #Output:True

‘issubset’

测试集合中的每个元素是否都在other元素中。

语法:

issubset(other)set<= other

示例:检查集合A是否为集合B的子集

可以通过issubset方法或使用≤运算符来完成。

A={1,2,3,4,5}B={4,5,6,7,8}print (A.issubset(B)) #Output: Falseprint (A<=B) #Output: False

A={1,2,3}B={1,2,3,4,5}print (A.issubset(B)) #Output: Trueprint (A<=B) #Output: False

Proper subset

测试集合是否为other的真子集,即set <= otherand set != other。

句法:

set< other

示例:检查集合A是否是B的真子集

如果两个集合相等,则意味着 A.issubsetset(B) 返回True,但是真子集A

A={1,2,3,4,5}B={4,5,6,7,8}print (A

A={1,2,3,4,5}B={1,2,3,4,5}print (A

A={1,2,3}B={1,2,3,4,5}print (A

‘issuperset’

测试other中的每一个元素是否在集合中。

语法:

issuperset(other)set>= other

示例:检查集合A是否为B的超集

可以通过issuperset方法或使用≥运算符来实现:

A={1,2,3,4,5}B={4,5,6,7,8}print (A.issuperset(B)) #Output: Falseprint (A>=B) #Output:True

A={1,2,3,4,5}B={1,2,3}print (A.issuperset(B)) #Output: Trueprint (A>=B) #Output:True

Proper superset

测试集合是否是other集合的真超集,即,set >= otherand set != other。

语法:

set> other

示例:检查集合A是否为B的真超集。

如果两个集合相等,则意味着A.issuperset(B)返回True,但是真超集A> B将返回False。

A={1,2,3,4,5}B={4,5}print (A>B) #Output: True

A={1,2,3,4,5}B={1,2,3,4,5}print (A>B) #Output: False

A={1,2,3}B={1,2,3,4,5}print (A>B) #Output: True

总结

Frozenset不支持所有更新方法,frozenset类型不可变且不可哈希创建,一旦创建内容无法更改。由于所有更新方法都修改了原始集,所以frozenset不支持它。

我们可以通过两种方式执行数学集合设置操作:使用运算符或使用一种方法。其不同之处在于,如果使用方法,将接受iterable作为参数。但是对于运算符,仅应设置参数。如果不是,则会引发 TypeError。所有更新方法都会更新原始集,frozenset不支持该更新。除了更新方法外,所有其他方法都返回一个新集合。

凡是在京东购书的用户,可以将订单信息和评价发到itbook8@163.com,将会获取超值大礼包(包括案例源码,超多的视频教程,数据集等资源)返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值