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

Dropping max value in list, keeping duplicates

我有一个包含整数的列表列表。 例如,一行看起来像这样:

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]

如何保留重复值?

您可以将列表中的最大值传递给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))