我一直在CodeWarriors上练习一个问题,在该问题中,我基本上必须做不同的设置,但保留未排除的repeating元素。例如:([[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]
但是同一程序without列表理解,该程序给出正确的输出:
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.count(i)
始终为零。
在第二个版本中,您将不断添加duplicate
,因此duplicate.count(i)
有时会为非零。