Python的集合介绍

Python的集合介绍,第1张

和列表类似,集合也是一个数据集合,其也不要求元素的类型一致。但是集合有下面两个特点:

•集合内元素唯一。如不可以用1、2、1、1组成集合,因为其包含重复的1。

•集合是无序的,添加元素时不能指定位置,删除元素时也不能通过指定位置,只能通过指定值。当然也不能通过位置来定位某个元素。

1、创建集合

我们可以从列表创建集合,将列表中的元素都加入到集合中,如果有重复的元素就仅保留一个。

a = set([1, 1, 3])

print(a)#输出结果:set([1, 3])     

也可以从元组、字典和其他集合构建集合。比如:

a = set((0, 1, 2, 3, 3, 2))   

使用的是字典的键来构建集合,字典的值没有被使用到,比如:

a = set({1:10, 2:20, 3:30})

从字符串构建集合,其每个字符都成为集合的一个元素,比如:

a = set("abcdefabc") 

输出结果:a={'c', 'e', 'f', 'b', 'd', 'a'}

另外一个集合构建集合,比如:

a = set([1, 2, 3]) 

b = set(a)  输出结果:b={1, 2, 3}

当然也可以构造一个空的集合,使用的方法是set()。空集合没有任何元素,比如:

a = set()

1添加元——add(值)

函数只能添加一个元素。

如果添加的元素已经在集合中存在,那么不会发生任何变化。

2扔掉元素——discard(值)

该函数删除集合中指定的值对应的元素。

如果指定值在集合中不存在,则不做任何 *** 作。

3删除指定值——remove(值)

该函数和discard()的不同之处在于,如果指定的值在集合中不存在,会抛出异常。

4清空所有元素——clear()

该函数扔掉所有的元素。执行完该函数后,该集合将变成一个空的集合。

aclear()

5删除第一个元素——pop()

如果集合中有元素,则返回值为删除掉的元素的值。

如果集合为空,则抛出异常。

6得到差集——difference(集合对象)

该函数返回一个新的集合,该集合包含所有属于a而不属于b的元素,如图所示。该 *** 作不会改变原始集合a或者b的内容。

7差集 *** 作符(-)

该 *** 作符和difference()类似,返回一个新的集合,该集合包含所有属于a而不属于b的元素。该 *** 作不会改变原始输入集合a或者b的内容。

8从集合中删除另一个集合中存在的元素——difference_update(集合对象)

该函数和difference()的不同是 *** 作数a会被修改,而且没有返回值。

9得到两个集合的交集——intersection(集合)

该函数返回所有的同时属于集合a和集合b的元素组成的集合,即返回的是一个集合,该集合的所有元素都同时属于集合a和b,如图所示。输入集合a和b在该过程中没有发生任何改变。

10交集 *** 作符(&)

该 *** 作符和intersection()的效果是一样的。

11删除集合a中所有不属于集合b的元素——intersection_update(集合)

该函数也是求交集,与intersection()不同的是其修改原始输入集合,并且没有返回值。这也是为何该接口函数后面带有update字样,因为其更新了原来的输入集合。

12是否存在交集——isdisjoint()

该函数判断是否存在这样的元素,其同时属于集合a和集合b。如果存在这样的元素,返回False;否则返回True。

13并集——union(集合a,集合b)

该函数返回一个新的集合,该集合的元素要么属于输入集合a要么属于集合b。该 *** 作不修改作为输入的两个集合a和b。如图表示该函数返回的集合的内容。

14并集 *** 作符(|)

该 *** 作符和union()的效果是一样的。其返回一个并集,并且不修改输入集合的内容。

15添加属于b而不属于a的元素——update()

该函数在集合a中添加属于b而不属于a的所有元素。该 *** 作和union()不同的是,其修改了输入集合a,并且没有返回值。

16外集——symmetric_difference()

外集就是由只属于集合a或者只属于集合b的元素组成的集合,如图所示。该 *** 作返回一个新的集合,并且不修改原来的输入集合a和b。

17外集 *** 作符(^)

该 *** 作符和symmetric_difference()的效果是一样的,也是返回一个新的集合,并且不会修改输入的集合a或者b。

18a和b的并集减去a和b的交集——symmetric_difference_update()

该函数和symmetric_difference()的区别是,其修改了集合a的值,并且没有返回值。

19是指定集合的子集吗——issubset()

a是b的子集就是说集合a的所有元素都属于集合b。

如果a等于b,那么a和b互为子集。

20是指定集合的超集吗——issuperset()

a是b的超集合就是说集合b中的所有元素都属于集合a。

如果a是b的超集,那么b就是a的子集。

如果a等于b,那么它们互为子集,同时也互为超集。

难度:★★★☆☆

类型:数组

方法:动态规划

力扣链接请移步 本题传送门

更多力扣中等题的解决方案请移步 力扣中等题目录

给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。

示例 1:

输入: nums = [4, 3, 2, 3, 5, 2, 1], k = 4

输出: True

说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。

提示:

1 <= k <= len(nums) <= 16

0 < nums[i] < 10000

这道题我们采用类似动态规划的方法来做。但是这道题的做法和以前的动态规划不同。

输入数组为nums,先判断特殊情况,我们先求得数组中元素和划分为k个包的平均数,如果元素和不能被k整除,或者存在任意一个元素大于平均数,则不能满足题目的要求的划分方式。这个是显而易见的。

我们用一个二进制数字来表示nums中的元素被选中或者未被选中,用数字表达的好处是节省空间,定义函数helper,函数的输入有两个:

current_state:当前各个数字的选择状态,用二进制数表达,1代表选中,0代表未选中;

current_sum:当前选中的数字的和。

函数的输入方式实际上规定了一种选择方式,函数的返回值为在当前选择方式下,能否实现题目要求的划分。

函数完成以下功能:

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步 力扣中等题解析

LeetCode

Given a collection of integers that might contain duplicates, nums , return all possible subsets (the power set)

Note: The solution set must not contain duplicate subsets

Example:

力扣

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明: 解集不能包含重复的子集。

示例:

回溯

Python

过滤新建啊。

d1 = {'read':1,'blue':3,'black':4}

# d2包含了d1中所有key中含'a'的键与值

d2=dict((k,v) for k,v in d1items() if 'a' in k)

print(d2)

# d3包含了d1中所有值为奇数的键与值

d3=dict((k,v) for k,v in d1items() if v%2)

print(d3)

集合可以像元组一样,设置不可改变的类型;也可以默认像字典,列表一样,可以迭代改变;同时集合里的元素可以是列表,元组,字典。

1、python集合的作用——创建字典

可使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

>>> my_set = set(('apple',))

>>> my_set

{'apple'}

2、python集合的作用——添加元素(add(),update())

# add 作为一个整体添加到集合中

my_set = set()

my_setadd("abc")

print(my_set)

#update 是把要传入的元素拆分,做为个体传入到集合中

my_set = set()

my_setupdate("abc")

print(my_set)

3、python集合的作用——删除元素(remove(),pop(),discard())

#remove 如果集合种有,则直接删除;如果没有,程序报错 格式:集合名remove(元素)

my_set = {11, 13, 15}

my_setremove(13)

print(my_set) my_setremove(131)

print(my_set)

#pop 随机删除集合中的元素 如果集合中没有元素则程序报错

my_set = {11, 13, 15}

my_setpop()

print(my_set)

#discard 如果集合中元素存在,直接删除; 如果元素不存在 不做任何 *** 作 格式: 集合名discard(元素)

my_set = {11, 13, 15}

my_setdiscard(13)

print(my_set)

my_setdiscard(131)

print(my_set)

4、python集合的作用——交集( & )

set1 = {9, 2, 3, 4}

set2 = {3, 4, 5, 16}

new_set = set1 & set2

print(new_set)

# result {3, 4}

5、python集合的作用——并集( | )

set1 = {1, 2, 3, 4}

set2 = {3, 5, 5, 6}[page]

new_set = set1 | set2

print(new_set)

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

6、python集合的作用——差集(-)

项在前一个集合中,但不在后一个集合中。

set1 = {1, 2, 3, 4}

set2 = {3, 4, 5, 6}

new_set = set1 - set2

print(new_set)

# result {1, 2}

7、python集合的作用——对称差集( ^ )

即项在前一个集合或后一个集合中,但不会同时出现在二者中。即交集减去并集。

set1 = {1, 2, 3, 4}

set2 = {3, 4, 5, 6}

new_set = set1 ^ set2

print(new_set)

# result {1,2,5,6}

8、python集合的作用——子集判断

set1 = { 3, 4}

set2 = {3, 4, 5, 6}

# 判断set1是否是set2的子集

print(set1issubset(set2))

# result True

9、python集合的作用——父集判断

set1 = { 3, 4}

set2 = {3, 4, 5, 6}

# 判断set1是否是set2的父集

print(set1issuperset(set2))

# result False

10、python集合的作用——迭代和枚举

s={34,56,76,34,56,54,43,23,56}

for i in s:

print(i) ##迭代输出其内容

for i,v in enumerate(s):

print('index: %s,value: %s' %(i,v))

"""

result:

index: 0,value: 34

index: 1,value: 43

index: 2,value: 76

index: 3,value: 54

index: 4,value: 23

index: 5,value: 56

"""

可观察出,集合会自动过滤掉相同元素。

python集合的作用都有哪些?原来这些功能才是最实用的,集合可以像元组一样,设置不可改变的类型;也可以默认像字典,列表一样,可以迭代改变;同时集合里的元素可以是列表,元组,字典,你能处理好吗如果您还担心自己入门不顺利,可以点击本站的其他文章进行学习。

以上就是关于Python的集合介绍全部的内容,包括:Python的集合介绍、698. 划分为k个相等的子集(Python)、LeetCode 0090. Subsets II子集II【Python】等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10117983.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存