删除列表中的最大值,保留重复项
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 已经能够正确处理非重复最大值,无论如何,我已经更新了解决方案。以上是关于删除列表中的最大值,保留重复项的主要内容,如果未能解决你的问题,请参考以下文章