删除列表中的最大值,保留重复项

Posted

技术标签:

【中文标题】删除列表中的最大值,保留重复项【英文标题】:Dropping max value in list, keeping duplicates 【发布时间】:2021-12-29 00:15:20 【问题描述】:

我有一个包含整数的列表。 例如,一行如下所示:

my_list = [11,11,10]

我想删除最大值,目的是保留 2 个最小值。

但是,当我运行此代码时,它不仅会降低最大值,还会降低其重复值:

>>> [x for x in my_list if x!=max(my_list)]

Output: [10]

当列表中没有重复项时,一切都按预期工作:

>>> my_list = [12,11,10]
>>> [x for x in my_list if x!=max(my_list)]
Output: [11, 10]

如何保留重复值?

【问题讨论】:

在 for 循环中的 IF 条件评估为真之后添加 BREAK。所以将只删除退出的第一个值。 【参考方案1】:

您可以将列表中的最大值传递给list.remove 方法;它会删除第一次出现的传递值。

>>> my_list.remove(max(my_list))
>>> my_list
[11, 10]

PS:这是一个可变操作,所以它改变了原来的列表。

以上仅在重复最大值时有效,您可以将其与您所做的相结合:

if my_list.count(max(my_list)) == 1:
    my_list = [i for i in my_list if i!=max(my_list)]
else:
    my_list.remove(max(my_list))  

【讨论】:

@FishballNooodles,感谢您的指出。我刚刚发布了部分解决方案,因为 OP 已经能够正确处理非重复最大值,无论如何,我已经更新了解决方案。

以上是关于删除列表中的最大值,保留重复项的主要内容,如果未能解决你的问题,请参考以下文章

Mysql删除重复数据保留最小的id 的解决方法

SQL - 选择最大具有不同值的重复项

Pandas:如何删除重复的行,但保留所有行的最大值[重复]

使用 Python 删除对象列表中的重复项

如何在保留顺序的同时删除列表中的重复元素?

LazyColumn 项目从列表中删除后保留在内存中