使用函数 min() 从列表中删除较小的值

Removing the smaller value from a list using function min()

简而言之,计划如下:我想从 Python 列表中删除最小值。我的方法是创建一个新列表 trimmed ,它基本上是原始列表的副本,但条件如下:

仅当值不等于 min() 时才将其添加到修剪。像这样:

lis=[]
trimmed =[]

n = int(input("Enter number of elements : "))
for i in range(0, n):
    elements = int(input("Type a number: "))
    lis.append(elements) # adding the elements

# "trimmed" appends a new copy of "lis" removing the smaller value

trimmed = [x for i,x in enumerate(lis) if i != min(lis)]

print(trimmed)

问题是,有时似乎通过删除特定索引中的值而不是删除实际较小的值来构建 trimmed。例如。我刚刚输入了 5 ,2 ,6 和 9。它应该 ramv 删除第二个。相反,它打印出 [5, 2, 9]

这是因为您的 if i != min(lis) 根据 index 变量 i 检查最小值而不是值本身 xenumerate 返回 (index, val) 对,即此处的 (i, x)。碰巧 min(lis) 是 2,所以每当 i 达到 2 时,该值将被修剪,因此您看到 6 消失了(在第二个索引处)。修复是与 x:

进行比较
trimmed = [x for i,x in enumerate(lis) if x != min(lis)]

应该做。

但更好的是,让我们只计算一次最小值(以上计算多次):

minimum = min(lis)
trimmed = [x for i,x in enumerate(lis) if x != minimum]

此外,您似乎根本不需要 i

minimum = min(lis)
trimmed = [x for x in list if x != minimum]

索引与最小值无关。不用一一列举了。

minval = min(lis)
trimmed = [x for x in lis if x != minval]