从Python整数列表中删除最大值和最小值

30

我对Python并不完全陌生,但我很想学习/保持开发技能时的良好实践。

我想从一个数字列表中移除高和低值,虽然我知道如何做,但我还是很好奇是否有更好/更受欢迎的方法来实现这个目标。

mylist = [1, 4, 0, 3, 2]
mylist.sort() #[0, 1, 2, 3, 4]
trimmed = mylist[1:-1] #[1, 2, 3]

我得到了想要的答案,但我是否正确地获得了答案?

3个回答

55

如果您不想更改项目的顺序,以下是另一种方法:

mylist = [1, 4, 0, 3, 2]
mylist.remove(max(mylist))
mylist.remove(min(mylist))

假设高/低在列表中没有任何重复项,或者如果有重复项,只删除其中一个是可以接受的。

这将需要对列表进行2-4次遍历:两次查找最大值和最小值,最多两次查找要删除的值(如果它们恰好都在列表的末尾)。您可以通过编写Python循环一次性查找最大值和最小值(并记住每个索引,以便在循环后按索引删除项目)将此减少为一个。但是,min()max()是用C实现的,因此即使允许您减少遍历次数,将它们替换为Python代码可能会导致性能降低。


请注意,进行4次遍历仍然可能比对列表进行排序更快,但如果您希望mylist保持不变,并在trimmed中获得修剪版本,则应首先复制它。 - sverre
1
没错。trimmed = mylist[:] 然后在 trimmed 上进行操作。 - kindall

2

我提出这个方法是因为在我尝试修改列表时,列表中存在重复项。所以,我不想多次运行mylist.remove(min(mylist)),因为它每次只能删除一个值,我将其修改为一行代码。

mylist = [i for i in mylist if i > min(mylist) and i < max(mylist)]

0

我必须删除最大元素并将列表存储在变量中,最小元素也是如此。如果使用remove函数将其存储在变量中,则会输出none。因此要进行存储。

arr = [1, 2, 5, 4, 3]
arr.sort()
remmax = arr[0:-1]
remmin = arr[1:]
print(remmax)
print(remmin)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接