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

的人都有哪些?

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也有如下特性:

  1. 不重复,(互异性),也就是说集合是天生去重的
  2. 元素为不可变对象,(确定性,元素必须可hash)
  3. 集合的元素没有先后之分,(无序性)

  首先笼统的讲一下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] <class 'list'>
(0, 1, 2, 3) <class 'tuple'>
{0, 1, 2, 3} <class 'str'>

补充: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)

  

字符串操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8419009.html

字典操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8421724.html

列表操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8433116.html

python 集合操作方法详解的更多相关文章

  1. python集合操作方法详解

    前言 说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球的人都有哪些? play_basketball = ['a','b','c','d','e'] ...

  2. python 字符串操作方法详解

    字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串.其中三引号可以由多行组成,编写 ...

  3. python 字典操作方法详解

    字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 注意,浮点数比较很不精确, ...

  4. python 列表操作方法详解

    列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表是一个数据的集合,集合内可以放任何数据类型,可对集合方便的增删改查操作.Python已经内置确定序列的长度以及确定最大和最 ...

  5. python字符串操作方法详解

      字符串 字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串.其中三引号可以由多 ...

  6. python列表操作方法详解

      列表 列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表是一个数据的集合,集合内可以放任何数据类型,可对集合方便的增删改查操作.Python已经内置确定序列的长度以及确 ...

  7. python字典操作方法详解

    前言 字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 注意,浮点数比较很不 ...

  8. Python 列表(List)操作方法详解

    Python 列表(List)操作方法详解 这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下   列表是Python中最基本 ...

  9. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

随机推荐

  1. Array对象的方法详情

    题外话:从事前端开发有很长一段时间了,一直在不断的扩充各种框架的学习,总觉得要学的东西好多,但是技能并没有得到很大的提升,后发现自己一味去追求的它的广度,并没用去深究其深度,所以决定打算从零开始,从最 ...

  2. Redux入门示例-TodoList

    Tip 前端技术真是日新月异,搞完 React 不搭配个数据流都不好意思了.满怀期待的心去翻了翻 flux,简直被官方那意识流的文档折服了,真是又臭又长还是我智商问题?

  3. hihoCoder #1082 : 然而沼跃鱼早就看穿了一切(字符串处理)

    #1082 : 然而沼跃鱼早就看穿了一切 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句 ...

  4. [bzoj1223] [HNOI2002]Kathy函数

    首先由题解可得TAT,f(i)=i当且仅当i在二进制下为回文串. 那么问题就变成了1~n中有多少个二进制下的回文串. 把m转成2进制后就是正常的统计了= =. f[i]表示二进制下,有多少个i位的回文 ...

  5. [bzoj1731] [Usaco2005 dec]Layout 排队布局

    差分约束系统...因为题目要求的是1和n的最大距离所以这题就跑最长路.. 对于互相反感的牛(i与j互相反感,彼此距离至少为len,i<j),就有dis[j]-dis[i]>=len.就加一 ...

  6. Spark算子--union、intersection、subtract

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/252bcc1d1ab30c430d347279d5827615.html union.intersection ...

  7. IDC服务器的六大基础知识

    无论企业或个人来说,一个是否适合自己的IDC运营商对于业务发展是至关重要的.然而很多用户对IDC行业一知半解,不太了解服务器的种类,更不知道选择什么样的服务器更适合自己了.今天编辑汇总了一些IDC所需 ...

  8. eclipse导入项目之后报错

    一.项目本身就有错 二.jdk版本的问题 参考网址:http://jingyan.baidu.com/article/95c9d20da3ec5fec4e756186.html 从别的地方导入一个项目 ...

  9. 【笔记】npm 安装 vue-cli

    最近完成了慕课网的 高仿饿了么webApp 课程,对于vue 的认识有了更深一步的认识,但是其脚手架 vue-cli 的安装流程还是有点懵,于是今天重新试了一遍加深认识 网上参考过一些有用的教程在这里 ...

  10. 20165206学习基础和C语言基础调查

    - 技能 我的一项可以拿的出手的技能是萨克斯.但不敢说有多厉害,更不敢说比大多数人更好,只能说是还可以.我学萨克斯有5年左右的时间吧,这5年里印象最深刻的还是前两年.前两年主要是基础训练.我从最基础的 ...