首页 > 解决方案 > 从列表中删除最大值和最小值而不复制列表

问题描述

说我有这个清单

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]

标签: pythonlistsubset

解决方案


你想要的是

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]

推荐阅读