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

获取列表中所有数字之间的平均差值(python),python,list-comprehension,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

我有一个列表,我想了解其中所有数字之间的差异。从算法上讲,我似乎应该从列表中的每一项中取减法的绝对值,然后求出减法之和的平均值。不要担心绝对值部分。那只和我的申请有关

例如:

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新手。有人能给出一个如何循环使用
列表a
的提示吗?

从您的示例来看,您似乎正在尝试循环长度为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

考虑使用numpy软件包,该软件包超级高效且可靠。 下面是一个例子:

>>将numpy作为np导入
>>>列表a=[1,2,3,4]
>>>a=np.数组(列表a)
>>>np.diff(a)
[1,1,1]

需要9.489059448242188e-05秒,即0.00009秒

我看不到任何减法正在进行…我不明白。。。你的例子似乎与你的问题无关。这些减法发生在哪里?你要说明的那些总数是什么?列表理解是用来创建列表的。您是否正在创建
列表
?如果没有,那么您不需要列表。如果您是,您可能需要列表理解,如果它是好的和可读的。@CoryKramer抱歉,我澄清了。
abs(1-3)
不是
3