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

时间:2017-10-31 17:00:31

标签: python list-comprehension

我有一个列表,我想了解其中所有数字之间的差异。在算法上,似乎我应该从列表中相互减去每个项目的绝对值,然后找到减法总和的平均值。 不要担心绝对值部分。这只与我的申请有关。

例如:

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来执行此操作?

2 个答案:

答案 0 :(得分:1)

请考虑使用numpy软件包,该软件包非常高效且可靠。 这是示例:

>>> 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秒

答案 1 :(得分:0)

从你的例子看,你似乎试图循环遍历长度为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循环而不是试图将其压缩成嵌套列表理解:

>>> list_a = [1,2,3,4]
>>> diffs = []
>>> for i, e in enumerate(list_a):
        for j, f in enumerate(list_a):
            if i != j: diffs.append(abs(e-f))

>>> sum(diffs)/len(diffs)
1.6666666666666667