Python 如何从计算中排除列表中的最大数字
我有一个带有浮动的列表,希望得到列表中所有项目的平均值,但总是忽略最大的数字。然后从平均值中减去未包含的一个浮动,因为这将是最大的差异。然后我想创建一个列表,将差异放入其中Python 如何从计算中排除列表中的最大数字,python,list,listitem,Python,List,Listitem,我有一个带有浮动的列表,希望得到列表中所有项目的平均值,但总是忽略最大的数字。然后从平均值中减去未包含的一个浮动,因为这将是最大的差异。然后我想创建一个列表,将差异放入其中 original_list = [[0.5, 1.4, 2.1, 5.2], [2.3, 3.2, 5.3, 2.1], [1.3, 3.1, 2.1, 5.3]] result_list = [[-3.87], [-2.77], [-3.13]] 我不知道如何从计算中排除最大的数字,因为它总是在另一个位置。我们可以循环
original_list = [[0.5, 1.4, 2.1, 5.2], [2.3, 3.2, 5.3, 2.1], [1.3, 3.1, 2.1, 5.3]]
result_list = [[-3.87], [-2.77], [-3.13]]
我不知道如何从计算中排除最大的数字,因为它总是在另一个位置。我们可以循环列表,对每个子列表进行排序,然后执行计算,将结果附加到结果列表中
import numpy as np
original_list = [[0.5, 1.4, 2.1, 5.2], [2.3, 3.2, 5.3, 2.1], [1.3, 3.1, 2.1, 5.3]]
rv = []
for x in original_list:
l = sorted(x)
rv.append([np.mean(l[:-1])-l[-1]])
输出:
>>> rv
[[-3.866666666666667], [-2.766666666666666], [-3.1333333333333333]]
要对值进行四舍五入,请使用rv.append([四舍五入(np.mean(l[:-1])-l[-1],2)])
:
纯python解决方案
original_list = [[0.5, 1.4, 2.1, 5.2], [2.3, 3.2, 5.3, 2.1], [1.3, 3.1, 2.1, 5.3]]
def mean_no_max(l):
s, m = 0, float('-inf')
for i in l:
s += i
m = m if m > i else i
return [(s - m) / (len(l) - 1) - m]
print(list(map(mean_no_max, original_list))) # -> [[-3.86], [-2.76], [-3.13]]
使用
max()
和sum()
作为理解
from numpy import mean
original_list = [[0.5, 1.4, 2.1, 5.2], [2.3, 3.2, 5.3, 2.1], [1.3, 3.1, 2.1, 5.3]]
result_list = [[round(mean([v for v in list_ if v !=max(list_)])-max(list_), 2)] for list_ in original_list]
print(result_list)
一行:
import numpy as np
res = [[np.mean(sorted(i)[:-1])-sorted(i)[-1]] for i in original_list]
print(res)
您可以首先从嵌套列表中获取包含所有最大值的列表,然后按最大值筛选嵌套列表
max_values = [max(l) for l in original_list]
with_no_max = [[e for e in l if e < m] for l, m in zip(original_list, max_values)]
print(max_values)
print(with_no_max)
列表。删除(最大值(列表))?
from numpy import mean
original_list = [[0.5, 1.4, 2.1, 5.2], [2.3, 3.2, 5.3, 2.1], [1.3, 3.1, 2.1, 5.3]]
result_list = [[round(mean([v for v in list_ if v !=max(list_)])-max(list_), 2)] for list_ in original_list]
print(result_list)
import numpy as np
res = [[np.mean(sorted(i)[:-1])-sorted(i)[-1]] for i in original_list]
print(res)
max_values = [max(l) for l in original_list]
with_no_max = [[e for e in l if e < m] for l, m in zip(original_list, max_values)]
print(max_values)
print(with_no_max)
[5.2, 5.3, 5.3]
[[0.5, 1.4, 2.1], [2.3, 3.2, 2.1], [1.3, 3.1, 2.1]]