Python-检查值是否存在于两个单独的列表中

时间:2018-10-24 21:05:50

标签: python

我创建了以下功能

you can use this one: (if helpful)

#include<stdio.h>
#include<conio.h>
int i,y=0,j=1;
int main(){
hh:
for(i=1;i<=j;i++){

   printf("#");

}

printf("\n");
j++;
if(j!=5){
goto hh;    
}

}

list1 = [6,2,3,8,1] list2 = [9,3,5,2,1] def value_in_both(list1,list2,value): return value in list1 and value in list2

该代码似乎可以正常工作,并且通过返回True或False基本上显示了在函数中输入的值在两个列表中是否都存在。但是,我想问自己,是否没有更有效或其他方法来解决该问题。是否存在特定的预定义功能?尝试了一些其他方法,这些方法到目前为止都行不通,也找不到功能。

欢呼

3 个答案:

答案 0 :(得分:1)

如果您经常进行此检查,请保留两组以进行O(1)成员资格测试。

set1 = set(list1)
set2 = set(list2)

不要在每次调用函数时在函数内部创建这些集合,创建集合是O(n)操作!

检查值v是否在这两个集合中的最快方法是v in set1 and v in set2

另一种可能性是v in set1 & set2,但是set1 & set2在这里不必要地计算了两个集合的完整交集。

如果您想继续阅读,这里是内置数据结构的Time Complexity Reference

edit:对于很小的列表,v in list1 and v in list2仍然有可能胜过集合。不过,列表中没有很多元素的机会。您需要自己对实际数据结构进行一些计时。

答案 1 :(得分:1)

您看起来很不错:)可以使用集合,但是从列表构造集合是O(n),因此除非您要做的不只是这项检查,否则不值得。

答案 2 :(得分:0)

您可以使用

intersection = set(list1).intersection(list2) 

在两组之间具有公共值, 然后您可以看到

if value in intersection