python特效集合_python 集合操作方法详解

说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球

的人都有哪些?

play_basketball = ['a','b','c','d','e']

play_game = ['a','b','c','f','g']

both_play=[]

for name in play_basketball:

if name in play_game:

both_play.append(name)

print(both_play)

结果:

['a', 'b', 'c']

在不了解集合之前我们肯定以上面的方法解决问题,但是学了集合之后,我们就有更简单的方法了,是什么呢?让我们慢慢了解。

集合set

集合用于包含一组无序的对象。与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:

不重复,(互异性),也就是说集合是天生去重的

元素为不可变对象,(确定性,元素必须可hash)

集合的元素没有先后之分,(无序性)

首先笼统的讲一下python3.x集合的内置函数有17个,分别如下:

序号

函数

描述

1

add(self, *args, **kwargs)

是把要传入的元素做为一个整个添加到集合中

2

clear(self, *args, **kwargs)

清空集合里面的所有元素

3

copy(self, *args, **kwargs)

复制集合里面的所有元素 ,返回一个浅复制

4

difference(self, *args, **kwargs)

求两个集合里面的不同的元素 ,又称差

5

difference_update(self, *args, **kwargs)

返回删除了 set “集合2”中含有的元素后的 set “集合1”

6

discard(self, *args, **kwargs)

如果在 set “集合”中存在元素 x, 则删除

7

intersection(self, *args, **kwargs)

求两个集合里面相同的元素,又称并 ,

返回只保留含有 set “集合2”中元素的 set “集合1”

8

intersection_update(self, *args, **kwargs)

返回只保留含有 set “集合2”中元素的 set “集合1” ,并更新自己

9

isdisjoint(self, *args, **kwargs)

判断两个集合是不是不相交,并返回

10

issubset(self, *args, **kwargs)

判断集合是不是包含其他集合,等同于a>=b

11

issuperset(self, *args, **kwargs)

判断集合是不是被其他集合包含,等同于a<=b

12

pop(self, *args, **kwargs)

删除并且返回 set “集合”中的一个不确定的元素, 如果为空则引发 KeyError

13

remove(self, *args, **kwargs)

从 set “集合”中删除元素 , 如果不存在则引发 KeyError

14

symmetric_difference(self, *args, **kwargs)

返回一个新的 set 包含 外面 和 里面 中不重复的元素

也就是两个集合不重复的元素

15

symmetric_difference_update(self, *args, **kwargs)

返回含有 set “里面”或者 set “外面”中有而不是两者都有的元素的 set “外面”

16

union(self, *args, **kwargs)

把两个集合连接起来,又称并

17

update(self, *args, **kwargs)

可以在集合里面添加多项

1,定义集合

#第一种方法

nums = [1,2,3,4,5,6,7]

num_set = set(nums)

print(num_set)

结果:

{1, 2, 3, 4, 5, 6, 7}

#第二种方法

num_set ={1,2,3,4,5,6,7}

2,增(更新)

set.add()

set.update([])

nums = {1,2,3,4,5,6,7}

#set.add()增加只能增加一个,不能增加多个值

# nums.add(8)

# print(nums)

#set.update()可以增加一个字符串,可以增加多个值

# nums.update([8])

# print(nums)

# nums.update('8')

# print(nums)

nums.update([8,9,10])

print(nums)

3,删

set1.remove(1)

nums = {1,2,3,4,5,6,7}

nums.remove(7)

print(nums)

结果:

{1, 2, 3, 4, 5, 6}

4,查:无法通过下标索引

5,改:不可变类型无法修改元素

6,交( &)

nums1 ={1, 2, 3, 4, 5, 6}

nums2 ={1, 2, 3, 4, 5, 10,7,8,9}

#交的方式一:&

a = nums1&nums2

print(a)

#并的方式二:intersaction

b = nums1.intersection(nums2)

print(b)

结果:

{1, 2, 3, 4, 5}

{1, 2, 3, 4, 5}

7,并(|)

nums1 ={1, 2, 3, 4, 5, 6}

nums2 ={1, 2, 3, 4, 5, 10,7,8,9}

#并的方式一:|

a = nums1|nums2

print(a)

#并的方式二:uniom

b = nums1.union(nums2)

print(b)

结果:

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

8,差(-)

nums1 ={1, 2, 3, 4, 5, 6}

nums2 ={1, 2, 3, 4, 5, 10,7,8,9}

#差的方式一:-

a1 = nums1-nums2

print(a1)

a2 = nums2-nums1

print(a2)

#差的方式二:difference

b1 = nums1.difference(nums2)

print(b1)

b2 = nums2.difference(nums1)

print(b2)

结果:

{6}

{8, 9, 10, 7}

{6}

{8, 9, 10, 7}

9,对称差集(^)

nums1 ={1, 2, 3, 4, 5, 6}

nums2 ={1, 2, 3, 4, 5, 10,7,8,9}

#对称差集表示方法一:^

a1 = nums1^nums2

print(a1)

#对称差集表示方法二:symmetric_difference

a2 = nums2.symmetric_difference(nums1)

print(a2)

结果:

{6, 7, 8, 9, 10}

{6, 7, 8, 9, 10}

10,集合转换

se = set(range(4))

li = list(se)

tu = tuple(se)

st = str(se)

print(li,type(li))

print(tu,type(tu))

print(st,type(st))

结果:

[0, 1, 2, 3]

(0, 1, 2, 3)

{0, 1, 2, 3}

补充:frozenset

冰冻集合,是一种特殊的集合类型,也是集合(集合是列表的话,冰冻集合就是元组)

下面创建冰冻集合(一般不会创建空的冰冻集合)

同时下面包含函数的补充

#创建带数据的冰冻集合

info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))

print(info,type(info))

#成员监测

result = 'gongzuo' in info

print(result)

#遍历冰冻集合

for i in info:

print(i)

#集合推导式(无法得到冰冻集合,可以得到集合,列表,元组,字典类型)

result = {i for i in info}

print(result,type(result))

#函数

#冰冻集合可以使用集合的函数(不修改集合本身的函数都可以使用)

info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))

#copy()

result = info.copy()

print(result)

#集合操作 交集,并集,差集,对称差集等 不修改冰冻集合本身就能使用:冰冻集合的操作结果都是冰冻集合

info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))

info2 = {'xuexi','gongzuo','kaoyan','xiuxi'}

#冰冻集合操作

result = info.union(info2)

print(result)

#普通集合操作(冰冻集合是参考集合)

result = info2.union(info)

print(result)

作者:战争热诚

你可能感兴趣的:(python特效集合)