这是数组。
arr=[1,2,2,1,5,1]
如果是相同的值,我需要计算in和所有其他元素之间索引差异的abs值,如下所示。
distance metric for a[0] = |0-3|+|0-5|=8
distance metric for a[1] = |1-2|=1
distance metric for a[2] = |2-1|=1
distance metric for a[3] = |3-0|+|3-5|=5
distance metric for a[4] = 0
distance metric for a[5] = |5-0|+|5-3|=7
输出是
[8,1,1,5,0,7]
有人能帮我在python中编写这个代码吗?
发布于 2021-01-30 17:20:02
您可以使用以下工作示例:
arr=[1,2,2,1,5,1]
res = []
for i, n in enumerate(arr):
val = 0
occur = [j for j, x in enumerate(arr) if x == n and j != i]
for o in occur:
val += abs(i-o)
res.append(val)
print(res)
8,1,1,5,0,7
更有效的版本,复杂度为O(n**2)
arr=[1,2,2,1,5,1]
res = []
for i, n in enumerate(arr):
val = 0
for j, x in enumerate(arr):
if x == n and j != i:
val += abs(i-j)
res.append(val)
print(res)
发布于 2021-01-30 17:25:49
使用列表理解和避免中间变量
arr = [1, 2, 2, 1, 5, 1]
output = []
for index in range(len(arr)):
output.append(sum(abs(index - k) if arr[k] == arr[index] else 0 for k in range(len(arr))))
print(output)
https://stackoverflow.com/questions/65970799
复制相似问题