python中确定两个列表(list)之间是否为子集关系
- 将列表(list)转换成集合(set)作比较
>>> A = [1,2,3,4,5]
>>> B = [1,2,3]
>>> C = [1,2,3,4,5]>>> set(A) < set(B) #A是B的真子集?False
False
>>> set(A) > set(B) #B是A的真子集?True
True
>>> set(A) > set(C) #C是A的真子集?False
False
>>> set(A) >= set(C) #C是A的子集?True
True
这种方法在某些情况下可能不适用,比如列表中有重复值的情况下:
>>> D = [1,2,3,4,4,4,5,5,5]
>>> print set(D) #列表转换成集合时会去重,在某些场景下需要考虑这个问题。
set([1, 2, 3, 4, 5])
除此之外,转换成集合的形式,还可以做更多的操作,求交集、并集、差集等等。
- 列表(list)通过逻辑操作比较
两个列表 A 和 B,其中 A 与 B 中的一个元素存在,如下:
>>> A = [1,2,3]
>>> B = [4,5,6,[1,2,3],7]
>>> C = [1,2,3,4,5,6,7]
>>> A in C
False
>>> A in B
True
>>> print B[3]
[1, 2, 3]
A整体作为一个元素,也算是子集。只含有A这个列表的子集。
上面的方式算是个特例。
此外,还有一种方式可以实现:
>>> A = [1,2,3]
>>> B = [1,2,3,4,5,6]
>>> any([A==B[i:i+len(A)] for i in range(0,len(B)-len(A)+1)])
True
我们来分析下这套语句的工作原理:
any([A==B[i:i+len(A)] for i in range(0,len(B)-len(A)+1)])
由外向内分离,整体两层
any()和A==B[i:i+len(A)] for i in range(0,len(B)-len(A)+1)
any(),只要其中任何一项为True就返回True。
>>> any([True,False,False])
True
>>> any([False,False,False])
False
A==B[i:i+len(A)] for i in range(0,len(B)-len(A)+1),一个for循环的简单写法。
简单套一下,可以知道循环B比A的列表长度长的次数,每次把B列表的切割和A列表作比较,看是否相等。所以上述步骤是这样的。
>>> A = [1,2,3]
>>> B = [1,2,3,4,5,6]
>>> [A==B[i:i+len(A)] for i in range(0,len(B)-len(A)+1)]
[True, False, False, False]
>>> any([True, False, False, False])
True
我们理解这条语句是如何工作的之后,我们会发现一个问题就是当A列表和B列表的切片比对时,可能会发生因为顺序不匹配导致无法认定为子集的情况,这显然是不符合数学上的定义的。
>>> A = [1,2,3]
>>> B = [1,4,3,2,5,6]
>>> any([A==B[i:i+len(A)] for i in range(0,len(B)-len(A)+1)])
False
可以看到只是把B列表的顺序改动了下,得到的是截然不同的结果。
所以在选择方法时,需要根据实际情况来决定那种方式适合你的程序或脚本。
python中确定两个列表(list)之间是否为子集关系相关推荐
- 如何在Python中串联两个列表?
如何在Python中串联两个列表? 例: listone = [1, 2, 3] listtwo = [4, 5, 6] 预期结果: >>> joinedlist [1, 2, 3, ...
- python 两个列表比较_如何在Python中比较两个列表
python 两个列表比较 In this article, we will understand the different ways to compare two lists in Python. ...
- python中怎么比较两个列表-python中比较两个列表的实例方法
cmp() 方法用于比较两个列表的元素. cmp()方法语法: cmp(list1, list2) 参数: list1 -- 比较的列表.list2 -- 比较的列表. 返回值: 如果比较的元素是同类 ...
- pythongps距离_在Python中求两个gps点之间的距离
我有下面的方法(haversine)返回两个gps点之间的距离.下表是我的数据帧.在 当我使用在dataframe上应用函数时,我得到错误"cannot convert the series ...
- python 对应元素相乘_如何在Python中执行两个列表的元素相乘?
使用与zip()混合的列表理解:. [a*b for a,b in zip(lista,listb)] 由于您已经在使用numpy ,所以将数据存储在一个numpy数组而不是列表中是很有意义的. 一旦 ...
- python中怎么比较两个列表-如何比较python中的两个列表并返回匹配
快速性能测试显示Lutz的解决方案是最好的:import timedef speed_test(func): def wrapper(*args, **kwargs): t1 = time.time( ...
- python一行输出多个数据_如何在Python中让两个print()函数的输出打印在一行内?
1.两个连续的print()函数为什么在输出时内容会分行显示? 解:print()中有两个默认参数sep和end,其中sep是代替分隔符,end是代替末尾的换行符,默认使用','代替空格,且默认末尾加 ...
- python中比较两个list是否有相同的元素及相同元素的个数
文章目录 参考网址 判断两个list是否有重复元素 方法一,用遍历 方法二,用set取交集 判断两个列表中不同的值 在list1中而不在list2中的元素 在list2中而不在list1中的元素 参考 ...
- 如何在python中找到两个日期时间对象之间的时差?
本文翻译自:How do I find the time difference between two datetime objects in python? 如何分辨两个datetime对象之间的时 ...
最新文章
- [THUWC2017]在美妙的数学王国中畅游
- 一个简单的路由映射,让你的树莓派通过SSH外网可访问
- java文件服务器开源,附架构师必备技术详解
- jQuery中的slideUp()、slideDown()、hide()、show()
- php 调用 perl,在PHP中使用与Perl兼容的正则表达式
- Inherits、CodeFile、CodeBehind
- 基于声波的手势识别技术
- 计算机考研专业课数字,2020北京航空航天大学计算机考研初试专业课经验
- 【整数规划算法】分支定界法及其Python代码实现
- 用百用计算机弹出,CPU使用率老是100%怎么办?小编详解解决CPU过高的问题
- 2003年高考语文全国最高分_最新消息!2020高考语文数学题型大变!全国卷或有多套题...
- P6617 查找 Search (线段树)
- Unity Shader:实现菲涅尔+色散效果以及相关原理解析
- uniapp自定义整包更新与热更新
- 【mysql】 mysql备份还原时发生异常:导入mysql文件提示“ASCII '\0' appeared in the statement”
- Flowable 数据库表结构 ACT_GE_BYTEARRAY
- 广州大学 操作系统实验之银行家算法
- 营增利降的美年健康,还能坐稳“民营体检第一股”吗?
- 计算机存储金字塔层次结构:寄存器 高速缓存 内存 硬盘
- 【FPGA】用Verilog代码实现无源蜂鸣器驱动实验