python - 消除 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)
解决方案
如果您想要所有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
.
推荐阅读
- arduino - char参数方法错误Arduino代码
- vba - 如何防止共享点文件签入在关闭前触发工作簿?
- c++ - 模板类缓冲区析构函数 C++
- javascript - 反应值返回为未定义
- android - 如何在 MVVM 中对动态膨胀的布局进行数据绑定
- python - 如何在 Pandas 中打印浮点数?
- c# - 如何将一个类的内容转换为一个新的类?
- reportbuilder - 报表生成器图表上的条件标签格式
- java - Java - 按对象中的特定值对对象的 ArrayList 进行排序
- ms-access - 为什么我的 MS Access 文本框(富文本)在单词之间缺少空格?