我对Python并不完全陌生,但我很想学习/保持开发技能时的良好实践。
我想从一个数字列表中移除高和低值,虽然我知道如何做,但我还是很好奇是否有更好/更受欢迎的方法来实现这个目标。
mylist = [1, 4, 0, 3, 2]
mylist.sort() #[0, 1, 2, 3, 4]
trimmed = mylist[1:-1] #[1, 2, 3]
我得到了想要的答案,但我是否正确地获得了答案?
如果您不想更改项目的顺序,以下是另一种方法:
mylist = [1, 4, 0, 3, 2]
mylist.remove(max(mylist))
mylist.remove(min(mylist))
假设高/低在列表中没有任何重复项,或者如果有重复项,只删除其中一个是可以接受的。
这将需要对列表进行2-4次遍历:两次查找最大值和最小值,最多两次查找要删除的值(如果它们恰好都在列表的末尾)。您可以通过编写Python循环一次性查找最大值和最小值(并记住每个索引,以便在循环后按索引删除项目)将此减少为一个。但是,min()
和max()
是用C实现的,因此即使允许您减少遍历次数,将它们替换为Python代码可能会导致性能降低。
我提出这个方法是因为在我尝试修改列表时,列表中存在重复项。所以,我不想多次运行mylist.remove(min(mylist)),因为它每次只能删除一个值,我将其修改为一行代码。
mylist = [i for i in mylist if i > min(mylist) and i < max(mylist)]
我必须删除最大元素并将列表存储在变量中,最小元素也是如此。如果使用remove函数将其存储在变量中,则会输出none。因此要进行存储。
arr = [1, 2, 5, 4, 3]
arr.sort()
remmax = arr[0:-1]
remmin = arr[1:]
print(remmax)
print(remmin)
mylist
保持不变,并在trimmed
中获得修剪版本,则应首先复制它。 - sverretrimmed = mylist[:]
然后在trimmed
上进行操作。 - kindall