集合

1、什么是集合

set(集合)是一个无序不重复元素的数据集,与列表的区别
1、无序的,不可以使用索引进行顺序的访问
2、不能够有重复的数据。

项目开发中,集合主要用在数据元素的去重和测试是否存在。
集合还支持一些数学上的运算,例如:intersection(交集),union(并集),difference(差集)和 symmetric_difference(对称差集)。

2、创建集合

创建集合的方法比较简单,使用大括号或者 set 函数,需要注意空的集合不能够使用 {} 创建,只能使用 set 函数,因为{} 创建的是一个空的字典 :
courses = set() #创建一个空集合
courses = {'Linux', 'C++', 'Vim', 'Linux'}
print(courses)
{'Linux', 'Vim', 'C++'}
上面的代码示例中可以看到,多余的 Linux 字符串已经被自动去除。

集合还可以直接由字符串与 set 函数进行创建,会将字符串拆散为不同的字符,并去除重复的字符:
与大括号的效果不同,大括号不会将字符串拆散
str = {'hello'}
print(str)
结果为{'hello'}

str = set('hello')
print(str)
结果为{'h', 'l', 'o', 'e'}

3、集合操作

3.1 add()向集合中增加元素且只能一次添加一个元素,如果元素已经存在则不进行操作
a = {1,2,3,4}
a.add('hello')
print(a)
{1, 2, 3, 4, 'hello'}

3.2 update()也可以添加元素,且参数可以是列表,元组,字典等
a = {1,2,3,4}
a.update('a','b',[10,11,'c','d'])
print(a)
{1, 2, 3, 4, 'a', 'd', 10, 11, 'c', 'b'}

3.3 remove() 从集合中删除元素,如果元素不存在则抛出 KeyError 异常:
a = {1,2,3,4}
a.remove(1)
print(a)
{2, 3, 4}

3.4 discard()移除集合中的元素,且如果元素不存在,不会发生错误。
a = {1,2,3,4}
a.discard(10)
print(a)
{1,2, 3, 4}

3.5 pop()随机删除集合中的一个元素,语法格式如下:
a = {1,2,3,4}
a.pop()
print(a)
{2, 3, 4}

3.6 len()计算集合元素个数
print(len(a))
4

3.7 clear()清空集合
a = {1,2,3,4}
print(a.clear())
None

3.8 copy()拷贝集合
a = {1,2,3,4}
b = a.copy()
print(b)
{1, 2, 3, 4}

3.9 isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
a = {1,2,3,4}
b = {3,4,5,6}
print(a.isdisjoint(b))
False

3.10 issubset() 判断a集合是否为b集合的子集。
a = {1,2,3,4}
b = {3,4,5,6}
print(a.issubset(b))
False

3.11 issuperset() 判断a集合是否是b集合的父集
a = {1,2,3,4}
b = {3,4,5,6}
print(a.issuperset(b))
False

3.12 in判断是否存在
a = {1,2,3,4}
print(1 in a)
True
print('1' not in a)
True
注意 not in 是一个判断 Python 是否不在集合中的操作。in 操作也适用于列表和元组。

4、两个集合的运算

a = {1,2,3,4}
b = {3,4,5,6}

4.1、& 交集,返回既在a又在b的元素,等效于intersection操作:
print(a & b)
print(a.intersection(b))
{3, 4}
a.intersection_update(b) #相当于a = a.intersection(b),将a与b的交集赋值给a
print(a,b)
{3, 4} {3, 4, 5, 6}

4.2、'|' 并集,存在a中或b中的元素,等效于 union 操作:
print(a | b)
print(a.union(b))
{1, 2, 3, 4, 5, 6}
并没有a.union_update(b)这个方法

4.3、- 差集,返回在a不在b的元素,等效于difference操作:
print(a - b)
print(a.difference(b))
{1, 2}
a.difference_update(b) #相当于a = a.difference(b),将a与b的差集赋值给a
print(a,b)
{1, 2} {3, 4, 5, 6}

4.4、^ 对称差集,返回只存在a或b集合中的元素,等效于symmertic_difference操作:
print(a ^ b)
print(a.symmetric_difference(b))
{1, 2, 5, 6}
a.symmetric_difference_update(b) #相当于a = a.symmetric_difference(b),将a与b的对称差集赋值给a
print(a,b)
{1, 2, 5, 6} {3, 4, 5, 6}

5、set不能创建数字集合,要创建数字集合只能用大括号

c = {1234,5678}
print(c)
{1234, 5678} 大括号是将每个数字当成一个元素

d = set(5678)
print(d)
TypeError: 'int' object is not iterable

e = set('1234')
print(e)
{'1', '4', '3', '2'} set将元素拆分

也不能写成
f = set('1234','5678')
print(f)
TypeError: set expected at most 1 arguments, got 2

day12-集合的更多相关文章

  1. python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式

    一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...

  2. 【JAVA零基础入门系列】Day12 Java类的简单应用

    俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重 ...

  3. Alpha冲刺集合

    Alpha冲刺集合 Day1 http://www.cnblogs.com/bugLoser/p/7901016.html Day2 http://www.cnblogs.com/bugLoser/p ...

  4. day12 EL 表达式和国际化开发

    day12 EL 表达式和国际化开发 1. EL(Expression Language) 表达式简介 1.1 执行运算 1.2 获取web开发常用对象(el 中定义了11个隐式对象) 1.3 使用 ...

  5. python学习博客地址集合。。。

    python学习博客地址集合...   老师讲课博客目录 http://www.bootcdn.cn/bootstrap/  bootstrap cdn在线地址 http://www.cnblogs. ...

  6. python set() 集合的添加删除、交集、并集、差集、交叉补集、集合的方法介绍以及使用案例

    可变不可变: 1.可变:列表.字典.例如列表类型是可变的,我修改了列表中的元素的值,但是列表本身在内存中的地址是没有变化的,所以列表的元素是可以被改变的 >>> name=[&quo ...

  7. day12(jsp指令&内置对象&动作标签、JavaBean、EL表达式&函数库)

    day12 JSP指令 JSP指令概述 JSP指令的格式:<%@指令名 attr1="" attr2="" %>,一般都会把JSP指令放到JSP文件 ...

  8. day12——生成器、推导式、简单内置函数

    day12 生成器 迭代器:python中内置的一种节省空间的工具 生成器的本质就是一个迭代器 迭代器和生成器的区别:一个是pyhton自带的,一个是程序员自己写的 写一个生成器 基于函数 在函数中将 ...

  9. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  10. .Net多线程编程—并发集合

    并发集合 1 为什么使用并发集合? 原因主要有以下几点: System.Collections和System.Collections.Generic名称空间中所提供的经典列表.集合和数组都不是线程安全 ...

随机推荐

  1. 三星GT-N8010刷机教程

    本刷机教程只针对三星GT-N8010机器(以下简称GT-N8010),以下操作本人已在GT-N8010机器上亲测,且都成功,其它机器没有测试不能保证成功. 刷机有风险,请谨慎使用!请先备份资料和信息. ...

  2. elasticsearch 安装(基于java运行环境)

    解压安装包 [root@Aliyun resource]# tar -xvf elasticsearch-5.5.2.tar.gz 添加当前主机的普通账户 [root@Aliyun resource] ...

  3. 计时器setInterval()

    在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互时间:周期性执行或调用表达式之间的 ...

  4. 从知名外企到创业公司做CTO是一种怎样的体验?

    这是我近期接受51CTO记者李玲玲采访的一篇文章,分享给大家. 作者:李玲玲来源:51cto.com|2016-12-30 15:47 http://cio.51cto.com/art/201612/ ...

  5. Zabbix 课程大纲

    Zabbix 课程笔记  day1 Zabbix 安装  day1 Zabbix 添加主机 day1 Zabbix 创建监控项目 day1 Zabbix 创建触发器 day1 Zabbix 告警内容配 ...

  6. Bootstrap的简介及使用

    一.Bootstrap简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.javascript 的,它简洁灵活,使得 Web 开发更 ...

  7. Postgres 主从复制搭建步骤

    系统版本: CentOS Linux release 7.5.1804 (Core) 数据库 psql (PostgreSQL) 10.5 2台机器ip : 172.17.0.3 /172.17.0. ...

  8. 2018/11/5 每日分析-test

    郑醇1901,M30向上一笔中,只是看起来不太值得做,主要因为现在30分钟向上一笔空间无法判定,未必能上去(M5中枢如果向上突破并且不背驰才可能有机会:如果直接下去或者向上后背驰,那么这里就只是一个M ...

  9. Spring MVC post请求乱码解决

    在页面发送POST请求,将中文传递给controller,在编译平台发生乱码,导致存储到数据库中的数据也乱码 解决办法: 在web.xml中添加一个编码过滤器 <filter> <f ...

  10. (转)C# WebApi 跨域问题解决方案:CORS

    原文地址:http://www.cnblogs.com/landeanfen/p/5177176.html 阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2. ...