集合

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. 《Java并发编程实战》笔记-状态依赖方法的标准形式

    void stateDependentMethod() throws InterruptedException { //必须通过一个锁来保护条件谓词 synchronized(lock) { whil ...

  2. (转载)java list排序

    1.简介 这个和数组的排序又不一样了. 其实Java针对数组和List的排序都有实现,对数组而言,你可以直接使用Arrays.sort,对于List和Vector而言,你可以使用Collections ...

  3. NPF or NPCAP service is not installed

    "NPF or NPCAP service is not installed" "could not start local server process:GNS3&qu ...

  4. java打印实心10*10正方形, 空心10*10正方形

    public class PrintSquare { public static void main(String[] args) { printSolidSquare(10); System.out ...

  5. 一行代码避免OkHttp的网络库应用被抓包

    在建立socket连接之前,OkHttp会获取系统的代理信息,如果设置代理,那么通过DNS解析其IP然后使用代理IP来建立socket连接.如果没有设置代理,那么会使用请求中的url的IP地址,来建立 ...

  6. Linux平台下源码安装mysql多实例数据库

    Linux平台下源码安装mysql多实例数据库[root@linux-node1 ~]# netstat -tlunp | grep 330tcp6 0 0 :::3306 :::* LISTEN 6 ...

  7. 对偶上升法到增广拉格朗日乘子法到ADMM

    对偶上升法 增广拉格朗日乘子法 ADMM 交替方向乘子法(Alternating Direction Method of Multipliers,ADMM)是一种解决可分解凸优化问题的简单方法,尤其在 ...

  8. 用wiershark抓dns数据包

    wireshark是非常好的抓包工具,捕获工具也很强大.比如说我只要抓dns数据包,其他数据包全部丢弃. 步骤如下: 选择菜单->捕获-捕获接口-输入-所选择接口的捕获过滤器:port 53 1 ...

  9. 通过创建临时表合并某一个库的hive小文件

    #!/bin/bash #需要指定hive中的库名 #set -x set -e DB=$1 if [ -z $1 ];then echo "Usage:$0 DbName" ex ...

  10. WebApp专家评委打分的两种进入模式

    A模式: 当前PC端的前期设置如下: [管理员允许时,只针对管理员指定选手] 选项选中.在现场时,管理员点击 状态未知 或下方红框所示按钮 发出打分允许指令时, 专家评委使用WebApp进入专家打分区 ...