首页 > 解决方案 > 消除 for 循环中的“找到”变量

问题描述

在过去,我们在遍历列表时使用“found”变量来表示您找到了匹配项。现在有使用带有 for 循环的'else'来消除使用'found'变量的pythonic构造。例如,这很好地工作:

l = [1, 2, 3]
magic_number = 4

for n in l:
    if n == magic_number:
        print("Magic number found")
        break
else:
    print("Magic number not found")

但是,我有一个嵌套的 for 循环,并且我需要存储第二个数组(下面的 m)中不存在但确实存在于第一个数组(下面的 l)中的所有项目。我只是不确定如何实施这个结构。我不想(如果我不必)使用“找到”变量......有什么想法吗?

l = [1, 2, 3]
m = [4, 5, 6]

not_found = list()

for n in l:
   for o in m:
      if n == o:
         print("Found a match")
         break
   else:
      print("No match found")

   not_found.append(o)

标签: pythonpython-3.xanti-patterns

解决方案


如果您想要所有l不在其中的元素,m您可以进行理解(如@PatrickHaugh 建议的那样)或集合操作。

领悟:

>>> l = [1, 2, 3]
>>> m = [4, 5, 6]
>>> [o for o in l if o not in m]
[1, 2, 3]

如果您更喜欢使用集合操作:

>>> l = {1, 2, 3}
>>> m = {4, 5, 6}
>>> l - m
{1, 2, 3}
>>> l = {1, 2, 3, 4}
>>> l - m
{1, 2, 3}

请注意,l这里msets.


推荐阅读