当前位置: 首页 > news >正文

Python | 检查两个列表中是否至少有一个共同元素

给出两个列表a,b。检查两个列表中是否至少有一个共同的元素。

例如

Input : a = [1, 2, 3, 4, 5]
b = [5, 6, 7, 8, 9]
Output : True

Input : a=[1, 2, 3, 4, 5]
b=[6, 7, 8, 9]
Output : False

方法1:遍历列表

遍历两个列表,我们可以检查它们是否至少存在一个公共元素。在遍历两个列表时,如果我们发现其中有一个元素是公共的,那么我们返回true。完成遍历和检查后,如果没有相同的元素,则返回false。

def common_data(list1, list2):result = False# traverse in the 1st listfor x in list1:# traverse in the 2nd listfor y in list2:# if one commonif x == y:result = Truereturn resultreturn result# driver code
a = [1, 2, 3, 4, 5]
b = [5, 6, 7, 8, 9]
print(common_data(a, b))a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9]
print(common_data(a, b))

输出

True 
False

时间复杂度:O(n*m),其中n和m是输入列表的长度。
空间复杂度:O(1)。

方法2:使用集合属性

使用set的and属性,如果至少存在一个公共元素,则set(a)& set(B)返回一个正整数,如果不包含任何正整数,则返回0。因此,我们在set_a中插入a,在set_b中插入B,然后检查set_a和set_b是否为正整数。

def common_member(a, b):a_set = set(a)b_set = set(b)if (a_set & b_set):return Trueelse:return Falsea = [1, 2, 3, 4, 5]
b = [5, 6, 7, 8, 9]
print(common_member(a, b))a =[1, 2, 3, 4, 5]
b =[6, 7, 8, 9]
print(common_member(a, b))

输出

True 
False

时间复杂度:O(m + n),其中m和n分别是输入列表a和b的长度。
空间复杂度:O(m + n)。

方法3:使用集合交集

使用集合的交集函数。a_set.intersection(b_set)如果至少有一个元素是公共的,则返回正整数,否则返回0。因此,我们在set_a中插入a,在set_b中插入b,然后检查a_set.intersection(b_set),并根据值返回。

def common_member(a, b):a_set = set(a)b_set = set(b)if len(a_set.intersection(b_set)) > 0:return(True)return(False)  a = [1, 2, 3, 4, 5]
b = [5, 6, 7, 8, 9]
print(common_member(a, b))a =[1, 2, 3, 4, 5]
b =[6, 7, 8, 9]
print(common_member(a, b))

输出

True 
False

时间复杂度:O(n),其中n是a和b之间的较大列表的大小。
空间复杂度:O(n),其中n是a和b之间的较大列表的大小。

方法4: 使用Counter类

使用collections模块中的Counter类。Counter类是dict的一个子类,用于计算列表中元素的出现次数。
下面是一个例子,说明如何使用Counter类来检查两个列表是否至少有一个公共元素:

from collections import Counterdef have_common_element(list1, list2):counter1 = Counter(list1)counter2 = Counter(list2)for element, count in counter1.items():if element in counter2 and count > 0:return Truereturn Falsea = [1, 2, 3, 4, 5]
b = [5, 6, 7, 8, 9]
print(have_common_element(a, b))  # Truea = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9]
print(have_common_element(a, b))  # False

时间复杂度:O(n+m),其中n是list1的长度,m是list2的长度。
空间复杂度:O(k),其中k是两个列表中唯一元素的个数。

方法5:使用operator.countOf()方法

import operator as op
# Python code to check if two lists
# have any element in common# Initialization of list
list1 = [1, 3, 4, 55]
list2 = [90, 1, 22]flag = 0# Using in to check element of
# second list into first list
for elem in list2:if op.countOf(list1, elem) > 0:flag = 1# checking condition
if flag == 1:print("True")
else:print("False")

输出

True

时间复杂度:O(n)
空间复杂度:O(1)

方法6:使用any()和列表解析

列表解析通过将第一个列表的每个元素与第二个列表的每个元素进行比较来创建布尔值列表。如果列表中至少有一个布尔值为True,则any()函数返回True,表示两个列表之间至少有一个公共元素。

def common_member(a, b):return any(i in b for i in a)a = [1, 2, 3, 4, 5]
b = [5, 6, 7, 8, 9]
print(common_member(a, b))  # Truea =[1, 2, 3, 4, 5]
b =[6, 7, 8, 9]
print(common_member(a, b))  # False

输出

True
False

时间复杂度:O(n*m),其中n和m是输入列表的长度。
空间复杂度:O(1)。


http://www.mrgr.cn/news/38374.html

相关文章:

  • 动态规划(有背包问题)
  • 从零开始手写STL库:Priority_Queue
  • 文本相似度计算
  • 从信号量开始的里牛渴死生活
  • MATLAB中的并行计算:提升性能的策略与实践
  • 双向链表的实现
  • 为什么说AI普及之路还存在挑战呢?
  • 参数高效的迁移学习在自然语言处理中的应用
  • mov视频怎么转换成mp4?这几种转换方法值得收藏起来!
  • C++里的随机数
  • CentOS 修改服务器登录密码的完整指南
  • 【C语言】动态内存管理:malloc、calloc、realloc、free
  • vue3使用Teleport 控制台报警告:Invalid Teleport target on mount: null (object)
  • c++进阶学习--------多态
  • Java如何在方法中操作数组元素
  • 计算机网络各层有哪些协议?计算机网络协议解析:从拟定到实现,全面了解各层协议的作用与区别
  • 业务资源管理模式语言19
  • 05-成神之路_ambari_Ambari实战-013-代码生命周期-metainfo-configFiles详解
  • 关系型数据库的特点
  • 工控主板在工业控制中扮演什么角色