检查两个变量是否在同一个列表中

4

在执行某些操作之前,如何确保两个不同的变量在同一个列表中?例如:

var1 = 1
var2 = 2
var3 = 3
var4 = 4
list1 = [var1, var2, var3, var4]
var5 = 5
var6 = 6
var7 = 7
var8 = 8
list2 = [var5, var6, var7, var8]

if var1 and var2 (are in the same list):
    print("In the same list")
else: 
    print("Not the same")

在这种情况下,使用元组或其他数据结构是否比列表更好,从而使操作更加容易?


1
你说变量在同一个列表中,是指它们的值吗? - bereal
这听起来像是您不熟悉如何最佳构建数据结构,并且您已经找错了解决其他问题的方法。您能描述一下您希望用这个解决什么问题吗? - user2357112
3个回答

4
>>> list1 = list(range(1, 5))
>>> 1 in list1 and 2 in list1
True
>>> 1 in list1 and 6 in list1
False

如果您想选择多个项目,请选择all:
>>> to_be_checked = [1, 2, 3, 4]
>>> all(item in list1 for item in to_be_checked)
True

不要为每个项目创建单独的变量,从一开始就将它们放入列表中。
为了提高效率,请使用集合。集合提供O(1)的查找速度。请注意,集合没有任何顺序,无法对其进行索引。
>>> list1 = list(range(10**5))
>>> s = set(range(10**5))
>>> %timeit 1000 in list1 and 10**5 in list1
100 loops, best of 3: 2.71 ms per loop
>>> %timeit 1000 in s and 10**5 in s
1000000 loops, best of 3: 403 ns per loop

3

我认为最干净的方法是测试你的 var_1 和 var_2 是否是一个或多个列表的子集

list_a = [1,2,3,4]
list_b = [5,6,7,8]
test_list = [1,4]    
if set(test_list)issubset(set(list_a)):
    do something

这将保留数据的列表形式,以便您可以随意使用它们,并且速度快,不像使用"and"语句那样令人困惑 - 在我看来,它会给代码添加不必要的复杂性。
只是为了明确,我正在请求Python测试一个集合,其成员为test_list的成员的集合是否是list_a成员的集合的子集。
实际上,我认为您在这里询问了更具体的问题 - 您有一些列表 - 假设您有一些方法可以让这些列表迭代。
 my_lists = [ [1,2,3,4], [5,6,7,8]]

 temp_list = [1,4]

 for each_list in my_lists:
     if set(temp_list).issubset(set(each_list)):
         print 'members of the same list'
      else:
         print 'not members of the same list'

0

表面上看:

if ((var1 in list1 and var2 in list2) or (var1 in list2 and var2 in list2))

稍微概括一下:

mylists = (list1, list2)
if any(var1 in x and var2 in x for x in mylists)

稍微概括一下:

mylists = (list1, list2)
myvars = (var1, var2)
if any(all(v in x for v in myvars) for x in mylists)

或者你可以完全从另一个角度来看待它:

which_list = dict()
which_list.update((val, 1) for val in list1)
which_list.update((val, 2) for val in list2)

if which_list[var1] == which_list[var2]

当然,这假设每个变量都只出现在一个列表中。

请注意,在所有情况下,您实际上并没有检查变量是否在列表中。变量不能在列表中。您正在检查变量的当前值是否在列表中。因此,如果任何变量引用相同的值,则无法从列表中确定使用哪个变量名称将值放入列表中。

正如Ashwini Chaudhary所说,set通常可以比listtuple更快地执行in。但对于这样小的列表,不太可能产生明显的差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接