从 Python 列表中删除重复项 [duplicate]

removing a duplicated item from a python list [duplicate]

提问人:Mohamed Fahd 提问时间:4/17/2023 更新时间:4/17/2023 访问量:40

问:

我正在尝试从具有重复最大值的列表中删除最大值,例如:[1,3,6,6,5] 我使用的代码只删除其中一个值,而不删除另一个值。任何想法为什么会发生这种情况?我使用的代码是:

    n = int(input())
    arr = map(int, input().split())
    lst = list (arr)
    for i in lst:
        if i == max(lst):
            del(lst[lst.index(i)])
    print (max(lst))
python 列表 del

评论

2赞 Tim Roberts 4/17/2023
用你想保留的那些做一个新列表几乎总是更好。一行:.newlst = [i for i in lst if i != max(lst)]
2赞 Allan Wind 4/17/2023
在循环访问列表时更改列表是有问题的。如果输入是 [3,2,1],是否要删除所有元素?
0赞 Marcelo Paco 4/17/2023
如果列表中的最大值出现两次以上,则预期行为是什么?

答:

1赞 John Gordon 4/17/2023 #1

这段代码就是问题所在:

for i in lst:
    if i == max(lst):
        del(lst[lst.index(i)])

正如@AllanWind所评论的,当您调用从列表中删除项目时,这会更改列表的大小,这会导致外部循环与实际列表内容不同步。delfor i in lst

不要在循环访问列表时向列表添加/删除项目。

对于这个特定的用例,这段代码会好得多:

m = max(lst)
while m in lst:
    lst.remove(m)
0赞 Allan Wind 4/17/2023 #2

您可以使用过滤器(如果您愿意,可以将结果分配给相同的过滤器):lst

lst = [1, 3, 6, 6, 5]
lst2 = list(filter(lambda f: f != max(lst), lst))