【问题标题】:How to scan a big list to find if all elements match the ones of a second, smaller, list?如何扫描一个大列表以查找所有元素是否与第二个较小列表的元素匹配?
【发布时间】:2021-04-26 23:37:07
【问题描述】:

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

  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

但是,整个事情都行不通。 有没有人可以帮助我?

【问题讨论】:

    标签: python list boolean


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      保持简单:

      这里没有必要使用嵌套循环——您正在从list2 中删除元素,基于来自list1 的信息,所以循环通过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']
      

      【讨论】:

        猜你喜欢
        • 2019-03-07
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-07
        • 2023-02-01
        相关资源
        最近更新 更多