WordPress网站建设宣传图片

Python获取两个列表的交集

释放双眼,带上耳机,听听看~!

python获取两个列表的交集方法分享:记录了三个Python获取两个列表的交集的方法,它们分别使用:列表转集合、for循环、列表推导式配合lambda函数实现,具体的示例代码如下:

方法一 列表转集合 推荐

集合操作符&

将两个列表转换为set集合,然后使用集合操作符&求解两个set集合的交集

# -*- coding: utf-8 -*-

list1 = ['5118', '站长之家', '爱站', 'Ahref', 'link114', '超级蜘蛛池']
list2 = ['MOZ', 'archive', 'semrush', '5118', '站长之家', '爱站']

result = set(list1) & set(list2)
# 也可以直接转换为列表
# result = list(set(list1) & set(list2))
print(result)
 

运行结果:

{'爱站', '站长之家', '5118'}

intersection方法

把列表转为集合的话,我们还可以使用intersection方法来实现,intersection() 方法用于返回两个或更多个集合中都包含的元素,即交集。返回值是一个新的集合。

集合(set)的intersection方法也可以直接将list类型作为参数。当使用list作为参数传递给intersection方法时,Python会隐式地将list转换为set,然后计算两个集合的交集。

语法

intersection() 方法语法:set.intersection(set1, set2 ... etc)

参数

  • set1 — 必需,要查找相同元素的集合
  • set2 — 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 隔开

下面是示例代码:

# -*- coding: utf-8 -*-
list1 = ['5118', '站长之家', '爱站', 'Ahref', 'link114', '超级蜘蛛池']
list2 = ['MOZ', 'archive', 'semrush', '5118', '站长之家', '爱站']
result = set(list1).intersection(list2)
print(result)

运行结果:

{'爱站', '站长之家', '5118'}

方法二 for循环

遍历其中一个列表检查当前遍历的元素是否存在于另外一个列表,如果存在那么将其加入到结果集中,得出的结果既是两个列表的“交集”部分

# -*- coding: utf-8 -*-

list1 = ['5118', '站长之家', '爱站', 'Ahref', 'link114', '超级蜘蛛池']
list2 = ['MOZ', 'archive', 'semrush', '5118', '站长之家', '爱站']

for element in list1:
    if element in list2:
        print(element)

运行结果:

5118
站长之家
爱站

方法三 嵌套列表处理 列表推导式配合lambda函数

前面的例子中两个list都是简单的单元素列表,如果列表中有嵌套类型的可以参考如下代码:

# -*- 编码: utf-8 -*-

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]

GitHub Copilot Chat对三种方法的分析建议

看看就好,哈哈哈…

三种方法的性能、适用场景、优点和缺点分析:

方法一:列表转集合 这种方法是将两个列表转换为set集合,然后使用集合操作符 & 求解两个set集合的交集。这种方法的优点是速度快,时间复杂度为O(n),但是它会消耗更多的内存,因为需要创建额外的set集合。

方法二:for循环 这种方法是通过遍历其中一个列表,检查当前遍历的元素是否存在于另外一个列表,如果存在那么将其加入到结果集中,得出的结果既是两个列表的“交集”部分。这种方法简单直观,但是当列表长度较大时,性能较差,因为它的时间复杂度为O(n^2)。

方法三:列表推导式配合lambda函数 这种方法是使用列表推导式和lambda函数来获取两个列表的交集。这种方法的优点是代码简洁,易于理解,但是当列表长度较大时,性能较差,因为它的时间复杂度为O(n^2)。

在实际使用中,应根据具体的需求和场景选择合适的方法

例如,如果两个列表的长度较小,可以选择for循环或者列表推导式配合lambda函数。如果两个列表的长度较大,应该选择列表转集合的方法。

此外,无论使用哪种方法,都应该注意错误处理和异常处理。例如,如果列表中包含不可哈希的元素(如列表或字典),则无法转换为set集合。在这种情况下,应该捕获并处理可能出现的异常。

给TA打赏
共{{data.count}}人
人已打赏
Python内置模块Python笔记

python转换Unix时间戳

2022-5-4 13:46:17

Python异常处理Python爬虫Python笔记

python爬虫报错:(Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))解决

2022-6-26 22:42:04

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
展开目录