python查找两个数组公有值
2019-03-08
技术
生活中经常碰到需要获取两数组公有值,那么python如何优雅获取两个数组之间的公有值,这里提供多种简单实用方法。
不过在真正写代码时,除了“能不能求交集”,通常还要关心两件事:结果是否去重,以及是否保留原列表顺序。下面几种方法的差别主要就在这里。
1.使用set元组的 &
list1 = [1,2,3,4,5,6,7]
list2 = [1,3, 5, 7, 9]
set(list1) & set(list2)
#{1, 3, 5, 7}
这种写法最短,但结果是 set,因此不会保留原来列表顺序,而且会自动去重。
2.使用set元组的intersection交集
list1 = [1,2,3,4,5,6,7]
list2 = [1,3, 5, 7, 9]
set(list1).intersection(list2)
#{1, 3, 5, 7}
本质上和前一种方法一样,也是集合交集,特点同样是无序且去重。
3.暴力查询list元素是否在第二个list中
list1 = [1,2,3,4,5,6,7]
list2 = [1,3, 5, 7, 9]
[element for element in list1 if element in list2]
# [1, 3, 5, 7]
如果你希望结果保持 list1 原本的顺序,这种列表推导式通常更直观。
4.实用set元组的减法
list1 = [1,2,3,4,5,6,7]
list2 = [1,3, 5, 7, 9]
set(list1) - (set(list1)-set(list2))
#{1, 3, 5, 7}
这个写法同样能得到交集,但可读性通常不如前两种 set 写法。
什么时候用哪种方法
- 只关心交集内容,不关心顺序,也不需要保留重复值:优先用
set(list1) & set(list2) - 想保留
list1的顺序:优先用列表推导式 - 如果列表很大,且还想保留顺序,可以先把第二个列表转成集合再判断成员关系
set2 = set(list2)
[element for element in list1 if element in set2]
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/289.html
- 版权声明:本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。