一行中两个列表中int之间的平均差异-Python
有两个非空列表,仅包含整数,它们的长度相同 我们的函数需要返回相同索引的整数之间的平均绝对差值。一行中两个列表中int之间的平均差异-Python,python,Python,有两个非空列表,仅包含整数,它们的长度相同 我们的函数需要返回相同索引的整数之间的平均绝对差值。 例如,对于列表[1,2,3,4]和[1,1,1,1],答案将是1.5 该功能需要在一行中完成 我有一个小东西可以做到这一点,但正如你可能猜到的,它不是一行: def avg_diff(a, b): sd = 0.0 for x, y in zip(a, b): sd += abs(x - y) return sd / len(a) 谢谢。使用列表中的内置su
例如,对于列表
[1,2,3,4]
和[1,1,1,1]
,答案将是1.5
该功能需要在一行中完成 我有一个小东西可以做到这一点,但正如你可能猜到的,它不是一行:
def avg_diff(a, b):
sd = 0.0
for x, y in zip(a, b):
sd += abs(x - y)
return sd / len(a)
谢谢。使用列表中的内置
sum
和len
函数:
a = [1, 2, 3, 4]
b = [1, 1, 1, 1]
sum([abs(i - j) for i, j in zip(a,b)]) / float(len(a))
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
使用列表中的内置
sum
和len
函数:
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
在Python3.4中,我们在标准库中获得了一些,包括
使用此函数和生成器表达式:
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
在Python3.4中,我们在标准库中获得了一些,包括
使用此函数和生成器表达式:
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
如果您愿意使用第三方库,
numpy
提供了一种方法:
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
如果您愿意使用第三方库,
numpy
提供了一种方法:
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
提示,使用:lambda你喜欢使用第三方库吗(例如
numpy
?)我想你的答案可以在这篇文章中找到:提示,使用:lambda你喜欢使用第三方库吗(例如numpy
?)我想你的答案可以在这篇文章中找到:你不需要做列表,只需使用一个生成器表达式:sum(i-j代表i,j在zip(a,b))/len(a)
我知道他使用它的确切原因:)谢谢Shahaf和所有人,我完全忘记了sum的存在。@Guy,这是为什么?因为我不需要。你不需要理解列表,只要使用一个生成器表达式:sum(I-j代表I,j在zip(a,b))/len(a)
我知道他为什么使用它:)谢谢沙哈夫和所有人,我完全忘记了sum的存在。@Guy,这是为什么?因为我不喜欢。我讨厌统计模块。如果你看一下代码,它非常复杂,并且有一个非常奇怪的要求,即结果的精度等于输入的精度,这是我们在统计学中很少关心的<代码>从统计导入平均值作为统计平均值--定义py_平均值(x):返回和(x)/len(x)--%timeit统计平均值(x)#137 ms±1.63 ms/循环(平均值±标准偏差7次,每个循环10次)
-%timeit py_平均值(x)359µs±4.44µs/循环(平均值±标准偏差7次,每个循环1000次)
@FHTMitchell我承认我也没有正常使用它,因为我通常使用numpy.array
s。我只知道它是存在的,它确实是一个很好的单线解决方案,正如OP所要求的那样。我猜它支持十进制
和分数
的价格是非常复杂的实现,与直接的实现相比,速度要快得多。是的,同样,我只是认为这是stdlib试图包含目前由第三方完成的事情,但不知何故却做得更糟的另一个例子——请参见attrs
和dataclasses
。参考%timeit np_平均值(x)#2.31 ms±41.3µs/循环(平均值±标准偏差为7次运行,每个循环100次)
,但该列表已传递给它。对于阵列:%timeit np_平均值(y)#63.1µs±1.57µs每个循环(平均值±标准偏差为7次运行,每个循环10000次)
我讨厌统计模块。如果你看一下代码,它非常复杂,并且有一个非常奇怪的要求,即结果的精度等于输入的精度,这是我们在统计学中很少关心的<代码>从统计导入平均值作为统计平均值--定义py_平均值(x):返回和(x)/len(x)--%timeit统计平均值(x)#137 ms±1.63 ms/循环(平均值±标准偏差7次,每个循环10次)
-%timeit py_平均值(x)359µs±4.44µs/循环(平均值±标准偏差7次,每个循环1000次)
@FHTMitchell我承认我也没有正常使用它,因为我通常使用numpy.array
s。我只知道它是存在的,它确实是一个很好的单线解决方案,正如OP所要求的那样。我猜它支持十进制
和分数
的价格是非常复杂的实现,与直接的实现相比,速度要快得多。是的,同样,我只是认为这是stdlib试图包含目前由第三方完成的事情,但不知何故却做得更糟的另一个例子——请参见attrs
和dataclasses
。参考%timeit np_平均值(x)#2.31 ms±41.3µs/循环(平均值±标准偏差为7次运行,每个循环100次)
,但该列表已传递给它。对于阵列:%timeit np#u平均值(y)#63.1µs±1.57µs/循环(平均值±标准偏差为7次运行,每个循环10000次)