数据类型--集合

数据类型的种类

常用的:
1、数字
2、字符串
3、列表
4、元祖
5、集合

不常用的:
队列
有序字典
默认字典

集合的特点

1、无序

2、去重(重要)

3、可嵌套

4、关系测试(重要)

创建集合

(一)、回顾:创建列表的2中方法:

1、li = []  #直接创建
2、list() #可以将其他数据类型转换成列表(相当于在内存有创建一个)

注意:
     它会自动去执行list里面的构造方法__init__。
     list __init__,内部执行for循环(11,22,33,44)转换成[11,22,33,44]
     在定义  li=[]的时候,会内部调用list()这种方式。

一、创建集合的注意事项:

1、无序,不重复的序列

1 set = {11,22,11,22}
2 print(set)
3
4 输出结果:
5 {11, 22}

2、用“{}”来代替,里面每个元素就是一个值,跟字典的区别就是无需key:values。
3、set的功能: set()  == list() 
4、将列表转换成集合的方法:

1 li = [11,22,11,22]
2 s1 = set(li)
3 print(s1,type(s1))
4
5 显示结果:
6 {11, 22} <class ‘set‘>

二、创建集合的三种方式:

1、普通创建方法:

1 1、se = {11,22}
2 例如:se = {"123","456"}

2、创建空集合:

1 s2 = set()            
2 这个是通过__init__进行转换的

3、转其他数据类型换成集合

1 s3 = set([11,22,33,4])

操作集合

一、添元素:

1 创建空集合:
2 s = set()
3 s.add(123)
4 s.add(123)
5 s.add(123)
6 print(s)
7
8 显示结果:
9 {123}

注意:上面示例添加了3次123,但是只能显示一个,因为set集合有去重功能。
扩展:爬虫访问过的url放到一个set()中,可以通过去重功能,过滤掉访问过的url。

二、清空set里的所有内容:

1 s.clear()
2 print(s)
3
4 显示结果:
5 set()

 

三、A中存在B中不存在的

注意:

A是指谁调用的表(s1的位置),
B就是被调用的表(s2的位置);

 1 #s1中存在s2中不存在的:
 2 s1 = {11,22,33}
 3 s2 = {22,33,44}
 4 s3 = s1.difference(s2)
 5 print(s3)
 6
 7
 8 #s2中存在s1中不存在的
 9 s3 = s2.difference(s1)
10 print(s3)
11
12 显示结果:
13 {11}
14 {44}

四、取出A中存在,B中不存在的,然后将结果替换掉A中的元素:

1 s1.difference_update(s2)
2 print("s1:",s1)
3
4 显示结果:
5 s1: {11}

注意:如果后续的代码不需要s1里面的元素时,可以使用带有Update方法来替换掉

五、对称差距
把A中存在的B中不存在的取出,
在把B中存在的A中不存在的取出;

 1 s1 = {11,22,33}
 2 s2 = {22,33,44}
 3
 4 s3 = s1.symmetric_difference(s2)
 5 print(s3)
 6 print(s1)
 7 print(s2)
 8
 9 显示结果:
10 {11, 44}
11 {33, 11, 22}
12 {33, 44, 22}

六、对称差距更新s1

取出A中存在B中不存在的元素,
取出B中存在A中不存在的元素,
将结果更新到A中

1 s1.symmetric_difference_update(s2)
2 print("更新s1",s1)
3
4 显示结果:
5 更新s1 {11, 44}

注意:如果后续的代码不需要s1里面的元素时,可以使用带有Update方法来替换掉

七、移除元素:

#移除指定元素,不存在不报错:(以后推荐使用这个避免bug)
s1 = {11,22,33}
s1.discard(1111)
print("移除1111,数据不存在,不会报错:",s1)

#移除指定元素,如果不存在就直接报错。
s1 = {11,22,33}
s1.remove(22)
print("移除指定元素,有就不报错:",s1)

# s1.remove(111)
# print("移除指定元素,没有就报错:",s1)

#移除某个元素,并获取移除元素的值。(随机移除,不需要加参数,因为集合是无序的)
s1 = {11,22,33,44}
ret = s1.pop() #不用加参数
print("集合无序,随机移除,返回移除的数据",s1)
print("显示pop移除的元素:",ret)

显示结果:
移除1111,数据不存在,不会报错: {33, 11, 22}
移除指定元素,有就不报错: {33, 11}
集合无序,随机移除,返回移除的数据 {11, 44, 22}
显示pop移除的元素: 33

注意:使用pop的场景:以后再学到队列的时候会使用到,一般情况下移除一个元素,然后把移除的这个元素赋值到一个变量,然后在其他引用。

八、取出A和B之间的交集:

1 s1 = {11,22,33}
2 s2 = {22,33,44}
3 s3 = s1.intersection(s2)
4 print("取出s1和s2的交集:",s3)
5
6
7 显示结果:
8 取出s1和s2的交集: {33, 22}

九、取出A和B之间的交集,并更新到A里:

1 s1 = {11,22,33}
2 s2 = {22,33,44}
3
4 s1.intersection_update(s2)
5 print("取出A和B之间的交集,并更新到A里:",s1)
6
7 输出结果:
8 取出A和B之间的交集,并更新到A里: {33, 22}

十、判断是否为包含于被包含的关系:

 1 s1 = {11,22,33}
 2 s2 = {22,33}
 3 s3 = s1.issuperset(s2)
 4 print("s1是s2的父序列:",s3)
 5
 6 s3 = s2.issubset(s1)
 7 print("s2是s1的子序列:",s3)
 8
 9
10 输出结果:
11 s1是s2的父序列: True
12 s2是s1的子序列: True

十一、取出A和B的并集:

1 s1 = {11,22,33}
2 s2 = {22,33,44}
3 s3 = s1.union(s2)
4 print("显示A和B的并集:",s3)
5
6 显示结果:
7 显示A和B的并集: {33, 22, 11, 44}

十二、批量添加,批量更新(对可循环和可迭代的对象有效)

 1 #批量添加,批量更新(对可循环和可迭代的对象有效)
 2 s1 = {11,22,33}
 3 s1.add(44)
 4 s1.add(55)
 5 s1.add(66)
 6 print("往s1里添加记录",s1)
 7
 8 #eg:列表
 9 li = [11,22,3,11,2]
10 s1.update(li)
11 print("将li列表中的元素加入到s1里:",s1)
12
13 #eg:元祖
14 tuples = (66,77,8,10,2)
15 s1.update(tuples)
16 print("将元祖加入到s1里:",s1)
17
18 #eg:字符串
19 st = "abiao"
20 s1.update(st)
21 print("将字符串加入到s1里:",s1)
22
23
24 显示结果:
25 往s1里添加记录 {33, 66, 11, 44, 22, 55}
26 将li列表中的元素加入到s1里: {33, 66, 3, 2, 11, 44, 22, 55}
27 将元祖加入到s1里: {33, 66, 3, 2, 8, 10, 11, 44, 77, 22, 55}
28 将字符串加入到s1里: {33, 66, 3, 2, ‘o‘, 8, ‘i‘, 10, 11, 44, 77, ‘a‘, ‘b‘, 22, 55}

集合的源代码:

  1 class set(object):
  2     """
  3     set() -> new empty set object
  4     set(iterable) -> new set object
  5
  6     Build an unordered collection of unique elements.
  7     """
  8     def add(self, *args, **kwargs): # real signature unknown
  9         """
 10         Add an element to a set,添加元素
 11
 12         This has no effect if the element is already present.
 13         """
 14         pass
 15
 16     def clear(self, *args, **kwargs): # real signature unknown
 17         """ Remove all elements from this set. 清除内容"""
 18         pass
 19
 20     def copy(self, *args, **kwargs): # real signature unknown
 21         """ Return a shallow copy of a set. 浅拷贝  """
 22         pass
 23
 24     def difference(self, *args, **kwargs): # real signature unknown
 25         """
 26         Return the difference of two or more sets as a new set. A中存在,B中不存在
 27
 28         (i.e. all elements that are in this set but not the others.)
 29         """
 30         pass
 31
 32     def difference_update(self, *args, **kwargs): # real signature unknown
 33         """ Remove all elements of another set from this set.  从当前集合中删除和B中相同的元素"""
 34         pass
 35
 36     def discard(self, *args, **kwargs): # real signature unknown
 37         """
 38         Remove an element from a set if it is a member.
 39
 40         If the element is not a member, do nothing. 移除指定元素,不存在不保错
 41         """
 42         pass
 43
 44     def intersection(self, *args, **kwargs): # real signature unknown
 45         """
 46         Return the intersection of two sets as a new set. 交集
 47
 48         (i.e. all elements that are in both sets.)
 49         """
 50         pass
 51
 52     def intersection_update(self, *args, **kwargs): # real signature unknown
 53         """ Update a set with the intersection of itself and another.  取交集并更更新到A中 """
 54         pass
 55
 56     def isdisjoint(self, *args, **kwargs): # real signature unknown
 57         """ Return True if two sets have a null intersection.  如果没有交集,返回True,否则返回False"""
 58         pass
 59
 60     def issubset(self, *args, **kwargs): # real signature unknown
 61         """ Report whether another set contains this set.  是否是子序列"""
 62         pass
 63
 64     def issuperset(self, *args, **kwargs): # real signature unknown
 65         """ Report whether this set contains another set. 是否是父序列"""
 66         pass
 67
 68     def pop(self, *args, **kwargs): # real signature unknown
 69         """
 70         Remove and return an arbitrary set element.
 71         Raises KeyError if the set is empty. 移除元素
 72         """
 73         pass
 74
 75     def remove(self, *args, **kwargs): # real signature unknown
 76         """
 77         Remove an element from a set; it must be a member.
 78
 79         If the element is not a member, raise a KeyError. 移除指定元素,不存在保错
 80         """
 81         pass
 82
 83     def symmetric_difference(self, *args, **kwargs): # real signature unknown
 84         """
 85         Return the symmetric difference of two sets as a new set.  对称差集
 86
 87         (i.e. all elements that are in exactly one of the sets.)
 88         """
 89         pass
 90
 91     def symmetric_difference_update(self, *args, **kwargs): # real signature unknown
 92         """ Update a set with the symmetric difference of itself and another. 对称差集,并更新到a中 """
 93         pass
 94
 95     def union(self, *args, **kwargs): # real signature unknown
 96         """
 97         Return the union of sets as a new set.  并集
 98
 99         (i.e. all elements that are in either set.)
100         """
101         pass
102
103     def update(self, *args, **kwargs): # real signature unknown
104         """ Update a set with the union of itself and others. 更新 """
105         pass

时间: 2024-11-06 12:02:25

数据类型--集合的相关文章

第二十节,基本数据类型,集合set、综合应用新数据更新老数据

基本数据类型,集合set.综合应用新数据更新老数据 创建两个字典新数据,更新原始数据,a为原始数据,b为新数据 1,分别获取到a字典和b字典的key(键),将两个字典的键分别转换成两个集合 2,找出a2集合里存在,b2集合里不存在的元素,得到:{'#2', '#3'}(需要删除:?) 3,找出b2集合里存在,a2集合里不存在的元素,得到:{'#4', '#7'}(需要新建:?) 4,找出a2集合和b2集合有交集的元素,也就是a2集合和b2集合都存在的元素,得到:{'#1'}(需要更新:?) 5,

Oracle存储过程-自定义数据类型,集合,遍历取值

摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇到数据处理,假如我们目前的功能在一个Packages中 Packages封装了多个不同功能的Procedure,我们在一个Procedure里面进行统计 在另外一个Procedure进行计算 这就需要一个存放结果集的地方 以前的解决方案是:建立了一个临时表,数据统计出来后,放入临时表中 在另外一个P

WPF ListView绑定基础数据类型集合

ListView中前台数据源绑定基础数据类型集合时没有Path名称,例如直接绑定List<string>,List<int>,BingdingList<string>等,此时直接使用{Bingding Path=.}即可 <ListView.View> <GridView> <GridViewColumn Header="HeaderName" > <GridViewColumn.CellTemplate&g

10 Python 数据类型—集合

在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算. sets 支持 x in s

006---Python基本数据类型--集合

集合 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px solid #000; } .table { border-collapse: collapse !important; } .table td, .table th { background-color: #fff !important; } .table-bordered th, .table-bord

python 数据类型 --- 集合

1. 注意列表和集合的区别 set 列表表现形式: list_1 = [1,3,4];  集合表现形式:set_1= set() list_1 = [1,2,3,4,23,4,2] print(list_1,type(list_1)) list_1 = set(list_1) print(list_1,type(list_1)) list_2 = set([2,4,6,8,10]) print(list_2,type(list_2)) #运行结果 [1, 2, 3, 4, 23, 4, 2] <

Python的学习之旅———基本数据类型(集合类型)

# 作用:去重,关系运算,# 定义:# 1:每个元素必须是不可变类型(可hash,可作为字典的key)# 2:没有重复的元素# 3:无序# s={1,2,'a','b','c','d','e','f'} #s=set({1,2,'a'}) # print(type(s),s) # 优先掌握的操作:# 长度len# s={1,2,'a','b','c','d','e','f'}# print(len(s))# 成员运算in和not in# print('a' in s)# for item in

基本数据类型-集合(set)_上周内容回顾(列表_元组_集合)

上周内容回顾 字符串数字列表元组字典 可变不可变:1.可变:列表,字典2.不可变: 字符串,数字,元组 访问顺序:1.直接访问:数字2.顺序访问:字符串,列表,元组3.映射: 字典 存放元素个数:容器类型:列表,元组,字典原子:数字,字符串 set集合是一个无序而且不重复的集合,有些类似于数学中的集合,也可以求交集,求并集等 集合特性:1.不同元素组成2.无序3.集合中元素必须是不可变类型 1 class set(object): 2 """ 3 set() -> ne

DAY02 - 数据类型: 集合

集合 定义: S=set(). 注意S={}为字典类型 求两个列表的公共部分 1 pythons=['AAA','BBB','CCC','DDD','EEE','FFF'] 2 linuxs=['DDD','GGG','EEE'] 3 res=[] 4 for p in pythons: 5 if p in linuxs: 6 res.append(p) 7 print(res)>>> ['DDD','EEE'] 1 集合内可以有多个元素,但是每个元素都必须是不可变类型,即可hash类型