关于一行中两个列表中的整数之间的平均差异:一行中两个列表中的整数之间的平均差异 – Python

Average difference between ints in two lists in one line - Python

有两个非空列表,只包含int,它们的长度相同。

我们的函数需要返回相同索引的整数之间的平均绝对差。例如,对于列表[1, 2, 3, 4][1, 1, 1, 1],答案将是1.5。该功能需要在一行中完成。

我有一点可以做到这一点,但正如你可能猜到的,这不是一句话:

1
2
3
4
5
def avg_diff(a, b):
    sd = 0.0
    for x, y in zip(a, b):
        sd += abs(x - y)
    return sd / len(a)

谢谢。


在python 3.4中,我们在标准库中得到了一些统计函数,包括statistics.mean

使用此函数和生成器表达式:

1
2
3
4
5
6
7
from statistics import mean

a = [1, 2, 3, 4]
b =  [1, 1, 1, 1]

mean(abs(x - y) for x, y in zip(a, b))
# 1.5


1
2
3
4
a = [1, 2, 3, 4]
b = [1, 1, 1, 1]

sum([abs(i - j) for i, j in zip(a,b)]) / float(len(a))


如果您愿意使用第三方库,numpy提供了一种方法:

1
2
3
4
5
6
7
import numpy as np

A = np.array([1, 2, 3, 4])
B = np.array([1, 1, 1, 1])

res = np.mean(np.abs(A - B))
# 1.5

使用列表中内置的sumlen功能:

1
2
3
4
5
lst1 = [1, 2, 3, 4]
lst2 = [1, 1, 1, 1]
diff = [abs(x-y) for x, y in zip(lst1, lst2)]  # find index-wise differences
print(sum(diff)/len(diff))    # divide sum of differences by total
# 1.5