如何扫描一个大列表以查找所有元素是否与第二个较小列表的元素匹配?

How to scan a big list to find if all elements match the ones of a second, smaller, list?

我遇到了一个我认为很简单的问题。 我有两个列表:

  1. 一个小的,看起来像这样:
list1 = ['A', 'B', 'C', 'D','E']
  1. 第二个列表更大,大约有 800 个元素。看起来像这样:
list2 = ['E', 'B', 'F', 'A', 'C', 'N'...]

我想扫描 list2 并查看它的所有元素是否都与 list1 中的元素相同。如果它们不同,我想看看哪些元素不同并从 list2 中取消它们。在此示例中,我想从 list2 中打印“F”和“N”并取消它们。

我试过了:

found = False
lenght2 = len(list2)
i = 0
for j in list1:
  for i in range(0, lenght2):
     if i != j:
        found = True
        #I don't know how to cancel i
        print(i)
        i = i + 1
     break

然而,整件事并没有奏效。 有没有人可以帮助我?

您可以遍历所有 list2,然后检查它是否在列表 1 中,如下所示:

for i in range(len(list2)):
  if list2[i] in list1:
    pass
  else:
    #Cancel list2[i] ? Or whatever.

保持简单:

这里不需要使用嵌套循环——您要根据 list1 中的信息从 list2 中删除元素,因此循环遍历 list2.

list1 = ['A', 'B', 'C', 'D', 'E']
list2 = ['E', 'B', 'F', 'A', 'C', 'N']

for e in list2[:]:
    if e not in list1:
        list2.remove(e)
print(list2)

此代码遍历 list2 并检查每个元素 (e) 是否出现在 list1 中。如果不是,则将其从 list2.

中删除

注意:这里使用 list2[:] 而不是 list2 是由于 this.


或者使用列表理解:

list1 = ['A', 'B', 'C', 'D', 'E']
list2 = ['E', 'B', 'F', 'A', 'C', 'N']

list2 = [e for e in list2 if e in list1]
print(list2)

查看更多关于列表理解如何工作的信息here


在这两种情况下,您应该得到:

['E', 'B', 'A', 'C']