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集合。在这种情况下,应该捕获并处理可能出现的异常。