在 for 循环中消除 "found" 变量
Eliminating a "found" variable in a for loop
过去,我们在遍历列表时使用 'found' 变量来表示您找到了匹配项。现在有使用带有 for 循环的 'else' 的 pythonic 构造来消除使用 'found' 变量。例如,这个效果很好:
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)中的所有项目。我只是不确定如何着手实施这个结构。我不想(如果我不需要)使用 'found' 变量...有什么想法吗?
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)
如果您想要 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
和m
是sets
。
有几种方法可以做到这一点。
最干净、最有效的方法实际上可能是使用 set
s。例如
l = {1, 2, 3}
m = {4, 5, 6}
not_found = m - l
如果日志记录对您很重要,您可以使用 in
键 world:
l = [1, 2, 3]
m = [4, 5, 6]
not_found = list()
for o in m:
if o in l:
print("Found a match")
else:
print("No match found")
not_found.append(o)
此外,我假设您的最后一行缩进不正确。目前你的例子会给出 not_found = [6, 6, 6]
过去,我们在遍历列表时使用 'found' 变量来表示您找到了匹配项。现在有使用带有 for 循环的 'else' 的 pythonic 构造来消除使用 'found' 变量。例如,这个效果很好:
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)中的所有项目。我只是不确定如何着手实施这个结构。我不想(如果我不需要)使用 'found' 变量...有什么想法吗?
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)
如果您想要 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
和m
是sets
。
有几种方法可以做到这一点。
最干净、最有效的方法实际上可能是使用 set
s。例如
l = {1, 2, 3}
m = {4, 5, 6}
not_found = m - l
如果日志记录对您很重要,您可以使用 in
键 world:
l = [1, 2, 3]
m = [4, 5, 6]
not_found = list()
for o in m:
if o in l:
print("Found a match")
else:
print("No match found")
not_found.append(o)
此外,我假设您的最后一行缩进不正确。目前你的例子会给出 not_found = [6, 6, 6]