获取列表中所有数字之间的平均差(python)

2024-10-08 22:25:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子,我想知道里面所有数字之间的差别。从算法上讲,我似乎应该从一个列表中取每一项相减的绝对值,然后求减法之和的平均值。不要担心绝对值部分。那只和我的申请有关。

例如:

list_a = [1,2,3,4]

list_a0 = (abs(1-2) + abs(1-3) + abs(1-4))/3 = 1+2+3 = 2
list_a1 = (abs(2-1) + abs(2-3) + abs(2-4))/3 = 1+1+2 = 1.33
list_a2 = (abs(3-1) + abs(3-2) + abs(3-4))/3 = 2+1+1 = 1.33
list_a3 = (abs(4-1) + abs(4-2) + abs(4-3))/3 = 3+2+1 = 2
avg = (lista0 + lista1 + lista2 + lista3)/4 = 1.67

我对python比较新。有人能给我一个提示,告诉你如何循环使用list_a来实现这一点吗?在


Tags: 算法a2列表a1数字absa0a3
2条回答

考虑使用numpy包,它是超高效和rubust的。 以下是示例:

>>> import numpy as np
>>> list_a = [1,2,3,4]
>>> a = np.array(list_a)
>>> np.diff(a)
[1,1,1]

耗时9.489059448242188e-05秒,即0.00009秒

从您的示例中,您似乎正在尝试循环长度为2的列表的所有排列。幸运的是,itertools有一个专门的函数:

>>> import itertools
>>> list_a = [1,2,3,4]
>>> diffs = [abs(e[1] - e[0]) for e in itertools.permutations(list_a, 2)]
>>> sum(diffs)/len(diffs)
1.6666666666666667

如果您不想使用itertools,我建议您使用for循环,而不是尝试将其压缩到嵌套列表理解中:

^{pr2}$

相关问题 更多 >

    热门问题