Python 从列表中删除最大值和最小值,而不复制列表
假设我有这个清单Python 从列表中删除最大值和最小值,而不复制列表,python,list,subset,Python,List,Subset,假设我有这个清单 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)) 它简化为(注意和而不是或) 要理解为什么要看 最后,
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))
它简化为(注意和
而不是或
)
要理解为什么要看
最后,您的代码效率很低,因为它每次都重新计算min
和max
。您可以改为:
extremes = [min(x), max(x)]
without_extremes = [i for i in x if i not in extremes]
如果您这样做,阅读起来会更简单:
x.删除(最大(x))
x、 移除(最小(x))
i
不能同时为max和min,除非列表只有一个元素。根据德摩根定律,在条件之间使用和,而不是或,或而不是(i==max(x)或i==min(x))
。如果所有元素相等,也可以同时使用max和min。不过,每个元素只删除一个。如果列表大小为1,则会崩溃。
extremes = [min(x), max(x)]
without_extremes = [i for i in x if i not in extremes]