python - 相同的布尔逻辑在循环中有效,但在列表理解中无效
问题描述
我一直在练习 CodeWarriors 上的一个问题,我基本上必须做不同的集合,但保留没有被排除
的重复元素。
例如: ([1,2,2,2,3] 和 [1]) 应该给出 --> [2,2,2,3]
所以我想在一个列表中维护重复的元素并在最后添加它们。
这是我的列表理解代码:[我已经删除了我写的多余的调试打印命令]
def array_diff(a, b):
duplicate = []
duplicate = [i for i in a if a.count(i)>1 and (i not in b) and (duplicate.count(i) < a.count(i)-1) ]
a = set(a)
b = set(b)
return list(a.difference(b)) + duplicate
对于输入:a = [1,2,2,2,3] ; b = [1]
给出输出:[2, 3, 2, 2, 2]
正确的输出应该是:[2,2,2,3]
但是没有列表理解的同一个程序,该程序给出了正确的输出:
def array_diff(a, b):
print(a)
duplicate = []
for i in a:
if a.count(i) >1 and i not in b and duplicate.count(i) < a.count(i) -1 :
duplicate.append(i)
a = set(a)
b = set(b)
return list(a.difference(b)) + duplicate
对于相同的输入,给出输出:[2, 3, 2, 2]
为什么会这样?
解决方案
在第一个中,您正在检查duplicate.count
列表理解。当您的列表理解完成后,它将被分配给duplicate
变量。在那之前,duplicate
是你之前分配给它的任何东西,它是一个空列表。所以duplicate.count(i)
总是零。
在第二个版本中,您正在追加duplicate
,所以duplicate.count(i)
有时会是非零的。
推荐阅读
- embedded-linux - 我无法操作我的通用 I/O
- java - 从没有api的网站检索数据
- javascript - 为什么我的“返回顶部”按钮在 Firefox 上失败?
- typescript - VUE:是否有可能没有冲突的属性名称数据?
- excel - 将错误作为运行时错误“-2147467259(800004005)”:自动化错误未指定错误
- r - 在约束和二元变量中使用函数进行约束优化
- javascript - 限制在全日历中创建事件
- asp.net - 页面加载一遍又一遍
- javafx - JavaFX:PopOver 窗口的鼠标事件 (ControlsFX)
- django - django api在连接到mysql时抛出500(内部服务器)错误