如何相互检查两个列表



如果我有两个列表,我希望能够查看一个列表中的项目是否与其他列表进行比较。例如,如果我有list1=[1,2,3]list2=[2,3,5,1],我希望能够查看List 2中的数字是否匹配列表1,而没有它们的顺序相同,即使还有其他数字。当您有两组数字时,就像在数学中一样,必须获得它们的交集。有没有办法查看List2是否具有List1中的所有项目,无论订单或其他数字如何?我将其用于if命令来检测列表是否等同于其他列表,然后将变量更改为" true"。

这是与我要工作的代码相似的示例。

listOne=[]
listRight=[1,2,5]
right="false"
while(win != "true"):
  option=input("What number would you like to add to list one?")
    if(option=="1"):
        listOne.append(1)
    elif(option=="2"):
        listOne.append(2)
  if(listOne==listRight):
    right="true"

感谢您的帮助。

注意:我的列表中不会有任何重复。一个将是3个数字的列表,即[1,4,7]另一个列表将从零到9个数字只使用数字1-9。我希望能够检查第二个数字是否在第二个列表中的任何位置,无论是否有额外的数字。就像[1,5,9]是第一个列表,而[7,1,3,6,9,5]是第二个列表,它们彼此平等将回来。

是,使用集

>>> list1=[1,2,3]
>>> list2=[2,3,5,1]
>>> set(list1) & set(list2) # intersection
{1, 2, 3}
>>> set(list1) | set(list2) # union
{1, 2, 3, 5}
>>> set(list1) - set(list2) # set difference
set()
>>> set(list2) - set(list1) # set difference
{5}
>>> set(list1) ^ set(list2) # symmetric difference
{5}
>>>

和子集关系:

>>> set(list1) < set(list1) # proper subset with <
False
>>> set(list1) < set(list1)
False
>>> set(list1) < set(list2)
True
>>> set(list1) <= set(list1) # normal subset
True
>>>

python具有set类型,您可以使用a <= b(或较低的可读b.issubset(a)(检查a是否是b的子集。

一些示例({a, b, c}set([a, b, c])的速记(:

>>> {1, 2} <= {1, 2, 3}
True
>>> {2, 1, 5} <= {1, 5, 2}
True
>>> set() <= {0}
True
>>> {1, 2, 4} <= {1, 2, 5}
False

在您的代码中使用:

attempt = set()
right = {1, 2, 5}
while not right <= attempt:
    option = input("What number would you like to add to list one?")
    attempt.add(int(option))

当您说要查看两个列表中的数字是否匹配时,您到底是什么意思?假设list1 = [1, 1]list2 = [1, 1, 1],您是否期望在这种情况下有true的返回值?如果是,或者您不在乎,那么简单地使用集合就是您的答案。

list1 = [1, 2, 3]
list2 = [1, 3, 3, 3, 2]
list3 = [3, 2]
print(set(list1) == set(list2)) # => True
print(set(list1) == set(list3)) # => False

我猜想在您的应用程序中,您不会期望遇到重复项,因此这应该是可以接受的。但是,如果您确实期望重复想要保留它们,您可能想从头开始构建一种方法,您只需对列表进行排序(d'Oh(。<<<<<<<<<<<<<</p>

最新更新