python两个 list 获取交集,并集,差集的方法

2023-05-16

 

1. 获取两个list 的交集

#方法一:
a=[2,3,4,5]
b=[2,5,8]

tmp = [val for val in a if val in b]         #列表推导式求的两个列表的交集

​print tmp
#[2, 5]

#方法二

print list(set(a).intersection(set(b)))      #列用集合的取交集方法

2. 获取两个list 的并集


print list(set(a).union(set(b)))

3. 获取两个 list 的差集

print list(set(b).difference(set(a))) # b中有而a中没有的 


python的集合set和其他语言类似,是一个无序不重复元素集, 可用于消除重复元素

支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。


并集

>>> a=[1,3,5]
>>> b=[1,2,3]
>>> set(a) | set(b)

set([1, 2, 3, 5])

# 或者
>>> set(a).union(b)
set([1, 2, 3, 5])

交集

把列表转换为集合,利用集合操作符求出交集,然后再转换回列表类型

>>> a=[1,3,5]
>>> b=[1,2,3]

>>> set(a) & set(b)

set([1, 3])
>>>

# 或者
>>> set(a).intersection(b)
set([1, 3])
>>>

前面的例子中两个list都是简单的单元素列表,还有一种比较特殊的情况,就是有嵌套类型的

代码如下:

b1=[1,2,3]

b2=[[2,4],[3,5]]

b3 = [filter(lambda x: x in b1,sublist) for sublist in b2]

print b3

运行结果如下

代码如下:
[2, 3]

差集

>>> a=[1,3,5]
>>> b=[1,2,3]

>>> set(a) - set(b)   a中有,b中没有

set([5])

# 或者

>>> set(a).difference(b)

set([5])
>>>

对称差集

返回两个集合中不重复的元素

>>> a=[1,3,5]
>>> b=[1,2,3]

>>> set(a) ^ set(b)

set([2, 5])

# 或者
>>> set(a).symmetric_difference(b)
set([2, 5])
>>>


列表A = ['2018-01-01','2018-02-01','2018-03-01','2018-04-01']

列表B = ['2018-03-01','2018-03-08']

要将A中的元素2018-03-01元素排除,可以用到的方法如下:


方法一:常规方法

>>> A = ['2018-01-01','2018-02-01','2018-03-01','2018-04-01']
>>> B = ['2018-03-01','2018-03-08']
>>> for item1 in A:
    for item2 in B:
    if item1 == item2:
    A.remove(item2)
>>> print(A)
['2018-01-01', '2018-02-01', '2018-04-01']
方法二:列表推导

>>> A = ['2018-01-01','2018-02-01','2018-03-01','2018-04-01']
>>> B = ['2018-03-01','2018-03-08']

>>> [item for item in A if not item in B]
['2018-01-01', '2018-02-01', '2018-04-01']

方法三: 用集合的求差集

>>> A = ['2018-01-01','2018-02-01','2018-03-01','2018-04-01']
>>> B = ['2018-03-01','2018-03-08']
>>> set(A) - set(B)   #A中有B中没有的
{'2018-04-01', '2018-01-01', '2018-02-01'}

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.  
  
sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。  
  
  
下面来点简单的小例子说明把。  
  
>>> x = set('spam')  
>>> y = set(['h','a','m'])  
>>> x, y  

(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))  
  
再来些小应用。  
  
>>> x & y # 交集  
set(['a', 'm'])  
  
>>> x | y # 并集  
set(['a', 'p', 's', 'h', 'm'])  
  
>>> x - y # 差集  
set(['p', 's'])  
  
记得以前个网友提问怎么去除海量列表里重复元素,用hash来解决也行,只不过感觉在性能上不是很高,用set解决还是很不错的,示例如下:  
  
>>> a = [11,22,33,44,11,22]  
>>> b = set(a)  
>>> b  
set([33, 11, 44, 22])  

>>> c = [i for i in b]  
>>> c  
[33, 11, 44, 22]  
  
很酷把,几行就可以搞定。  
  
1.8 集合   
   
集合用于包含一组无序的对象。要创建集合,可使用set()函数并像下面这样提供一系列的项:  
  
   
  
s = set([3,5,9,10])      #创建一个数值集合  
  
t = set("Hello")         #创建一个唯一字符的集合  
    
与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。例如,如果检查前面代码中t集合的值,结果会是:  
   
>>> t  
  
set(['H', 'e', 'l', 'o'])  
    
注意只出现了一个'l'。  
  
集合支持一系列标准操作,包括并集、交集、差集和对称差集,例如:  
  
   
  
a = t | s          # t 和 s的并集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(项在t中,但不在s中)  
  
d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
    
  
基本操作:  
  
t.add('x')            # 添加一项  
  
s.update([10,37,42])  # 在s中添加多项  
  
使用remove()可以删除一项:  
  
t.remove('H')  
  
len(s)   #set 的长度  
  
x in s  
测试 x 是否是 s 的成员  
  
x not in s  
测试 x 是否不是 s 的成员  
  
s.issubset(t)  
s <= t  
测试是否 s 中的每一个元素都在 t 中  
  
s.issuperset(t)  
s >= t  
测试是否 t 中的每一个元素都在 s 中  
  
s.union(t)  
s | t  
返回一个新的 set 包含 s 和 t 中的每一个元素  ,并集
  
s.intersection(t)  
s & t  
返回一个新的 set 包含 s 和 t 中的公共元素  ,交集
  
s.difference(t)  
s - t  
返回一个新的 set 包含 s 中有但是 t 中没有的元素  ,差集
  
s.symmetric_difference(t)  
s ^ t  
返回一个新的 set 包含 s 和 t 中不重复的元素  
  
s.copy()  
返回 set “s”的一个浅复制  
  
  
请注意:union(), intersection(), difference() 和 symmetric_difference() 的非运算符(non-operator,就是形如 s.union()这样的)版本将会接受任何 iterable 作为参数。

​相反,它们的运算符版本(operator based counterparts)要求参数必须是 sets。这样可以避免潜在的错误,如:为了更可读而使用 set('abc') & 'cbs' 来替代 set('abc').intersection('cbs')。从 2.3.1 版本中做的更改:以前所有参数都必须是 sets。  
  
另外,Set 和 ImmutableSet 两者都支持 set 与 set 之间的比较。两个 sets 在也只有在这种情况下是相等的:每一个 set 中的元素都是另一个中的元素(二者互为subset)。一个 set 比另一个 set 小,只有在第一个 set 是第二个 set 的 subset 时(是一个 subset,但是并不相等)。一个 set 比另一个 set 打,只有在第一个 set 是第二个 set 的 superset 时(是一个 superset,但是并不相等)。  
  
子 set 和相等比较并不产生完整的排序功能。例如:任意两个 sets 都不相等也不互为子 set,因此以下的运算都会返回 False:a<b, a==b, 或者a>b。因此,sets 不提供 __cmp__ 方法。  
  
因为 sets 只定义了部分排序功能(subset 关系),list.sort() 方法的输出对于 sets 的列表没有定义。  
  
  
运算符  
   运算结果  
  
hash(s)  
   返回 s 的 hash 值  
  
  
下面这个表列出了对于 Set 可用二对于 ImmutableSet 不可用的运算:  
  
运算符(voperator)  
等价于  
运算结果  
  
s.update(t)  
s |= t  
返回增加了 set “t”中元素后的 set “s”  
  
s.intersection_update(t)  
s &= t  
返回只保留含有 set “t”中元素的 set “s”  
  
s.difference_update(t)  
s -= t  
返回删除了 set “t”中含有的元素后的 set “s”  
  
s.symmetric_difference_update(t)  
s ^= t  
返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”  
  
s.add(x)  
  
向 set “s”中增加元素 x  
  
s.remove(x)  
  
从 set “s”中删除元素 x, 如果不存在则引发 KeyError  
  
s.discard(x)  
  
如果在 set “s”中存在元素 x, 则删除  
  
s.pop()  
  
删除并且返回 set “s”中的一个不确定的元素, 如果为空则引发 KeyError  
  
s.clear()  
  
删除 set “s”中的所有元素  
  
  
请注意:非运算符版本的 update(), intersection_update(), difference_update()和symmetric_difference_update()将会接受任意 iterable 作为参数。从 2.3.1 版本做的更改:以前所有参数都必须是 sets。  
  
还请注意:这个模块还包含一个 union_update() 方法,它是 update() 方法的一个别名。包含这个方法是为了向后兼容。程序员们应该多使用 update() 方法,因为这个方法也被内置的 set() 和 frozenset() 类型支持。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python两个 list 获取交集,并集,差集的方法 的相关文章

  • keil 提示internal command error和no sw device

    1 使用keil烧录软件的时候 xff0c jlink stlink无法识别到芯片 需要排查的问题 1 xff09 换条线 2 xff09 是不是有程序禁用了Seral Wire xff1a 使用cubeide cubeMX xff0c 容
  • 多线程编程模式之Single Threaded Execution 模式

    一 Single Threaded Execution 模式介绍 简单的来说 xff0c Single threaded execution 模式描述了在一种多线程环境下各个线程对于公用资源的使用方式 任一时刻 xff0c 只有一个线程可以
  • NVIDIA Jetson TX2 查看系统相关+运行demo

    1 查看Jetson TX2 L4T版本 xff1a head n 1 etc nv tegra release 2 查看系统版本 xff1a cat etc lsb release 3 查看系统内核 xff1a uname a 4 查看内
  • Docker镜像迁移至新的服务器(全部数据)

    1 找到你想移动的 Docker 容器的 ID 2 提交你的变更 xff0c 并且把容器保存成镜像 xff0c 命名为 newimage docker commit span class token number 3 span a09b25
  • 配置VNC环境在windows主机访问阿里云linux服务器

    配置VNC环境在windows主机访问阿里云linux服务器 虽然作为服务器使用更多的是使用字符终端连接服务器 xff0c 进行操作 xff0c 因为图形界面很消耗性能和资源 xff0c 但有的时候使用图形界面进行操作更为便捷 xff0c
  • pythondataframe输出小结

    在使用dataframe时遇到datafram在列太多的情况下总是自动换行显示的情况 xff0c 导致数据阅读困难 xff0c 效果如下 xff1a coding utf 8 import numpy as np import pandas
  • 聊聊 Redis 为什么构建自己的简单动态字符串 SDS

    我们知道 xff0c Redis 支持字符串 哈希 列表 集合和有序集合五种基本类型 那么我们如何把图片 音频 视频或者压缩文件等二进制数据保存到 Redis 中呢 xff1f 之前在使用 Memcached 缓存这类数据时是把它们转换成
  • 聊聊 Redis 高可用之持久化AOF和RDB分析

    Redis 持久化概述 Redis 是内存数据库 xff0c 数据都是存储在内存中 xff0c 为了避免进程退出导致数据的永久丢失 xff0c 需要定期将 Redis 中的数据以某种形式把内存中的数据保存到磁盘中 xff1b 当 Redis
  • mysqldump: Got error: 1044: Access denied for user XXXX when doing LOCK TABLES

    一 报错信息 在使用mysqldump 执行远程备份数据库的时候报如下错误 xff1a mysqldump Got error span class token number 1044 span Access denied span cla
  • jmap -heap [pid]运行报:Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException(不允许的操作)

    一 运行环境 操作系统 xff1a Ubuntu 5 4 0 6 Java版本 xff1a JDK8 二 执行命令 jmap heap span class token punctuation span pid号 span class to
  • chkconfig: command not found

    问题描述 在 ubuntu1 16 04 10 执行 chkconfig 命令报 chkconfig command not found 说明此服务上没有安装 chkconfig 执行如下命令进行安装 span class token fu
  • Docker 基础篇 之 安装

    一 Docker安装 查看 CentOS 内核版本 Docker 要求 CentOS 系统的内核版本高于3 10 执行如下命令查询 内核版本 span class token function uname span r span class
  • Java 基础 之 Valid 验证

    一 64 Valid 简介 Bean Validation 内置的校验器 校验器说明 64 Null被注解的元素必须为 null 64 NotNull被注解的元素必须不为 null 64 AssertTrue被注解的元素必须为 true 6
  • HttpURLConnection链接详解

    HttpURLConnection链接详解 一 简介 简单来说 xff0c HttpURLConnection 是 Java 提供的发起 HTTP 请求的基础类库 xff0c 提供了 HTTP 请求的基本功能 xff0c 不过封装的比较少
  • Apache HttpClient 详解

    1 简介 HttpClient 是 Apache Jakarta Common 下的子项目 xff0c 用来提供高效的 最新的 功能丰富的支持 HTTP 协议的客户端编程工具包 xff0c 并且它支持 HTTP 协议最新的版本和建议 Htt
  • OKHttp使用详解

    1 简介 OkHttp 是一个默认高效的 HTTP 客户端 xff1a HTTP 2 支持允许对同一主机的所有请求共享一个套接字 连接池减少了请求延迟 xff08 如果 HTTP 2 不可用 xff09 透明 GZIP 缩小了下载大小 响应
  • python二维码生成与扫码

    1 import qrcode img 61 qrcode make 34 hello world 34 img get image show img save 39 hello png 39 2 import qrcode qr 61 q
  • C语言可变参数(从stdarg.h到应用)

    1 什么是可变参数函数 在C语言编程中有时会遇到一些参数可变的函数 xff0c 例如printf scanf xff0c 其函数原型为 xff1a span class token keyword int span span class t
  • OkHttp 缓存实战

    1 简介 在实际业务中可能某些查询数据 xff0c 不经常变化 xff0c 为了节省流量 提高响应速度和增强用户体验等 xff0c 把变化频率小的数据缓存到本地 xff0c 以实现复用 OkHttp 的缓存功能使用起来也比较简单和灵活 xf
  • Feign 详解

    1 Feign 是什么 Feign是一个http请求调用的轻量级框架 xff0c 可以以Java接口注解的方式调用Http请求 Feign通过处理注解 xff0c 将请求模板化 xff0c 当实际调用的时候 xff0c 传入参数 xff0c

随机推荐

  • @Transactional 注解失效情况及解决办法

    一 64 Transactional 注解在了非 public 方法上 如下所示 64 Transactional修饰在了非public方法上 span class token annotation punctuation 64 Servi
  • @Transactional 事务加了 锁 为什么还有并发问题?

    一 原因分析 Spring 中通过在方法上添加注解 64 Transactional 可以很好的处理事务问题 Spring对此的处理原理是对 加了 64 Transactional 注解的方法 添加 AOP切面来时先事务管理的 而 sync
  • 聊聊微服务之什么是微服务及其好处

    一 什么是微服务 微服务就是一些协同工作的小而自治的服务 很小 xff0c 专注于做好一件事 在单一模块系统中 xff0c 随着新功能的增加 xff0c 代码库会越来越大 时间久了代码库会变得非常庞大 xff0c 以至于在什么地方修改都很困
  • RestTemplate 使用详解

    一 简介 常见的http客户端请求工具 xff1a JDK 自带 HttpURLConnectionApache HttpClientOKHttp 以上 工具虽然常用 xff0c 但对于 RESTful 操作相对不是太友好 所以 xff0c
  • BigDecimal 你使用对了吗

    背景 从事金融相关项目 xff0c 对BigDecimal应该是再熟悉不过了 xff0c 也有很多人因为不知道 不了解或使用不当导致资损事件发生 所以 xff0c 如果你从事金融相关项目 xff0c 或者你的项目中涉及到金额的计算 xff0
  • MySQL 中截取字符串的方法

    LEFT str len 从左边开始截取 xff0c 如果字符串为 null 则返回null str xff1a 被截取字符串 xff1b len xff1a 截取长度 span class token keyword SELECT spa
  • Redis 阻塞原因

    Redis 是典型的单线程架构 xff0c 所有的读写操作都是在一条主线程中完成的 当Redis用于高并发场景时 xff0c 这条线程就变的极其重要 如果它出现阻塞 xff0c 就会对应用带来致命的问题 当 Redis 出现阻塞时 xff0
  • 【pcl入门教程系列】之点云Concatenate

    简要说明 点云拼接 Concatenate 是指将点云进行累加在一起 xff0c 只是累加的方式不太一样 一种是点云的字段与维度完全一致 xff0c 数量可以不同 xff0c 两部分点云相加 xff0c 点云的数量增加了 另一种是点云的字段
  • python多线程

    单线程 from time import ctime sleep def music for i in range 2 print 34 I was listening to music s 34 ctime sleep 1 def mov
  • Nginx下配置Https证书详细过程

    一 Http与Https的区别 HTTP xff1a 是互联网上应用最为广泛的一种网络协议 xff0c 是一个客户端和服务器端请求和应答的标准 xff08 TCP xff09 xff0c 用于从WWW服务器传输超文本到本地浏览器的传输协议
  • SLAM学习记录:全局定位之gps说明

    这段时间因为各种事情耽误了 xff0c 好久没有进行更新了 xff0c 惭愧 xff01 前段时间在研究cartographer的定位建图模块 xff0c 在停更的时间主要再研究如何改善定位建图的效果 xff0c 也有一定的成效 xff0c
  • Windows操作系统名称与版本号汇总

    查看Windows系统版本号 xff1a 1 cmd xff1a winver 2 cmd xff1a systeminfo findstr Build 3 运行 xff1a dxdiag xff0c 可查看D3D版本 Windows操作系
  • 使用Onos+Ovs+Docker+Veth建立拓扑(2)

    使用Onos 43 Ovs 43 Docker 43 Veth建立拓扑 xff08 2 xff09 说明 首先在宿主机上安装一个带内核模块的ovs xff0c 然后在docker中安装一个不带内核的 这句话非常重要 可能存在的问题 Dock
  • 子网掩码 与同一网段

    子网掩码是必填的 子网掩码的作用 xff0c 通俗一点就是 就是用来分割子网和区分那些ip是同一个网段的 xff0c 那些不是同一网段的 以前以为ip地址的第三组数字就是网段 xff0c 其实大错特错了 其实同一网段指的是IP地址和子网掩码
  • 【人脸检测】OpenCV中的Haar+Adaboost级联分类器分解(一):Haar特征介绍

    最近由于工作原因 xff0c 需要研究OpenCV中的Adaboost级联分类器 我阅读了OpenCV中所有相关得代码 xff0c 包括检测和训练部分 xff0c 发现目前OpenCV中的Adaboost级联分类器代码有以下2个特点 xff
  • 认识 UML 类关系——依赖、关联、聚合、组合、泛化

    文章目录 1 依赖 xff08 Dependency xff09 2 关联 xff08 Association xff09 3 聚合 xff08 Aggregation xff09 4 组合 xff08 复合 xff0c Compositi
  • 常用开发软件及网站

    常用开发软件及网站 点击查看
  • 电商模式术语:ABC、B2B、B2C、C2C、B2M、M2C、B2A、C2A、O2O

    电商模式分类详解 一 ABC 英文单词 xff1a Agent xff08 代理商 xff09 Business xff08 商家 xff09 Consumer xff08 消费者 xff09 ABC 模式是新型电子商务模式的一种 xff0
  • TkMapper(通用mapper)

    TkMapper的配置及使用 TkMapper主要是做单标查询 xff0c 复杂的多表查询我们还得自己写sql 官方文档 xff1a 点击查看使用的是Springboot框架使用的数据库表ums permision xff1a idpidn
  • python两个 list 获取交集,并集,差集的方法

    1 获取两个list 的交集 方法一 a 61 2 3 4 5 b 61 2 5 8 tmp 61 val for val in a if val in b 列表推导式求的两个列表的交集 print tmp 2 5 方法二 print li