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

Python-检查值是否存在于两个单独的列表中,python,Python,我创建了以下函数 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 列表1、列表2、值中的值 该代码似乎有效,基本上通过返回True或False来显示函数中输入的值是否存在于两个列表中。然而,我在问自己,是否有更有效或不同的方法来解决这个问题。是否存在特定的预定义功能?尝试了其他一些不起作用的方法,

我创建了以下函数

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
列表1、列表2、值中的值

该代码似乎有效,基本上通过返回True或False来显示函数中输入的值是否存在于两个列表中。然而,我在问自己,是否有更有效或不同的方法来解决这个问题。是否存在特定的预定义功能?尝试了其他一些不起作用的方法,但到目前为止找不到函数


干杯

如果你经常做这项检查,为他们的O1会员资格测试准备两套

set1 = set(list1)
set2 = set(list2)
不要每次调用函数时都在函数内部创建这些集合,创建集合是一个On操作

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

另一种可能性是set1和set2中的v,但是set1和set2在这里不必要地计算两个集合的完全交集

如果您想继续阅读,下面是内置数据结构的详细信息

编辑:对于非常小的列表,列表1中的v和列表2中的v仍然可能优于集合。不过,这些列表将不可能包含很多元素。您需要自己对实际的数据结构进行一些计时。

您可以使用

intersection = set(list1).intersection(list2) 
要在两个集合之间具有公共值, 然后你可以看到

if value in intersection

你拥有的东西看起来很棒:你可以使用集合,但是从列表中构造集合是打开的,所以除非你要做的不仅仅是这一项检查,否则就不值得了。

为什么会有一个预定义的函数来实现这一点?正如您已经证明的,该语言允许您自己在一行中定义它。setlist1&setlist2@mad_那么如何测试特定外部值的成员资格?@mad_uuu为什么要计算整个交集?为什么要为一次mebership测试设置两组?如果只执行一次测试,则没有比列表1中的值和列表2中的值更快的了。如果重复此操作,则可能会根据问题中不可用的信息进行优化。无论如何,在需要之前不应该进行优化!google过早优化如果list1和list2是常量,那么可以,但是如果它们是变量,那么您必须创建不同的set@mad_是的,但可能在整个代码中使用set1和set2而不是列表,如果顺序和重复的元素无关紧要,那么定义函数的关键就是使用变量列表,否则就不需要定义function@mad_我再次试图指出,OP可以通过使用两个集合作为其函数的输入来提高效率。如果他必须有两个列表,可能是变异的,也可能不是变异的,那么这些集合就不适用了。谢谢你的评论。我不明白我该如何在我的函数中实现这一点。据我所知,我将两个列表都定义为集合。你是什么意思?很抱歉,我对Python非常陌生。这比列表1中的值和列表2中的值慢,因为它必须迭代两个列表,然后计算交集,然后计算散列值。