如何在不干扰计数器或列表长度的情况下删除数组中的元素



Codewars:给定一个列表lst和一个数字N,创建一个新列表,该列表最多包含lstN次,无需重新排序。例如,如果N=2,并且输入为[1,2,3,1,2,1,3,则取[1,3,1,2],去掉下一个[1,2],因为这将导致1和2在结果中出现3次,然后取3,这将导致[1,2、1、2,3]。

delete_nth ([1,1,1,1],2) # return [1,1]

delete_nth ([20,37,20,21],1) # return [20,37,21]

我将循环遍历数组以找到具有多于"0"的元素;x〃;数量但对我来说,问题是当我想删除那个元素时,它会改变数组的长度,以丢弃循环计数器。然后,当我尝试另一种方法,创建另一个列表,然后再次循环原始列表,并查看元素是否有超过";x〃;amount,那么我会将该元素复制到新数组中,而不使用旧数组,它会保留索引和循环,但现在我不知道如何在元素达到所需数量后停止复制。请帮帮我。我已经回答这个问题一个星期了。

也许你可以试试这个片段来看看它有什么帮助?

还没有做太多边缘案例,所以如果遇到一些边缘,请提出问题。

def delete_nth(lst, N):

seen = {}
res = []

for x in lst:
if x not in seen :
seen[x] = 0
else:
seen[x] += 1

if seen[x] <N:
res.append(x)
return res
print(delete_nth([1, 1, 1, 1], 2))      # [1, 1]
print(delete_nth([20, 37, 20, 22], 1))  # [20, 37, 22]

相关内容