python - 从列表中删除最大值和最小值而不复制列表
问题描述
说我有这个清单
x = [2, 4, 1, 11]
如果我只想保留我能做的最大值和最小值
[i for i in x if i == max(x) or i == min(x)]
(返回[1,11]
)
但是为什么这不能只删除最大值和最小值呢?
[i for i in x if i != max(x) or i != min(x)]
(返回[2, 4, 1, 11]
)
解决方案
你想要的是
not (i == max(x) or i == min(x))
简化为(注意and
而不是or
)
i != max(x) and i != min(x)
要了解为什么要查看德摩根定律。
最后,您的代码效率很低,因为它每次都重新min
计算max
。您可以改为:
extremes = [min(x), max(x)]
without_extremes = [i for i in x if i not in extremes]