Python: Calculate difference between all elements in a set of integers

时间秒杀一切 提交于 2020-07-21 04:40:09

问题


I want to calculate absolute difference between all elements in a set of integers. I am trying to do abs(x-y) where x and y are two elements in the set. I want to do that for all combinations and save the resulting list in a new set.


回答1:


I want to calculate absolute difference between all elements in a set of integers (...) and save the resulting list in a new set.

You can use itertools.combinations:

s = { 1, 4, 7, 9 }
{ abs(i - j) for i,j in combinations(s, 2) }
=>
set([8, 2, 3, 5, 6])

combinations returns the r-length tuples of all combinations in s without replacement, i.e.:

list(combinations(s, 2))
=>
[(9, 4), (9, 1), (9, 7), (4, 1), (4, 7), (1, 7)]



回答2:


As sets do not maintain order, you may use something like an ordered-set and iterate till last but one.




回答3:


For completeness, here's a solution based on Numpy ndarray's and pdist():

In [69]: import numpy as np

In [70]: from scipy.spatial.distance import pdist

In [71]: s = {1, 4, 7, 9}

In [72]: set(pdist(np.array(list(s))[:, None], 'cityblock'))
Out[72]: {2.0, 3.0, 5.0, 6.0, 8.0}



回答4:


Here is another solution based on numpy:

data = np.array([33,22,21,1,44,54])

minn = np.inf
index = np.array(range(data.shape[0]))
for i in range(data.shape[0]):
    to_sub = (index[:i], index[i+1:])
    temp = np.abs(data[i] - data[np.hstack(to_sub)])
    min_temp = np.min(temp)
    if min_temp < minn : minn = min_temp
print('Min difference is',minn)

Output: "Min difference is 1"




回答5:


Here is another way using combinations:

from itertools import combinations

def find_differences(lst):
  " Find all differences, min & max difference "
  d = [abs(i - j) for i, j in combinations(set(lst), 2)]

  return min(d), max(d), d

Test:

list_of_nums = [1, 9, 7, 13, 56, 5]
min_, max_, diff_ = find_differences(list_of_nums)
print(f'All differences: {diff_}\nMaximum difference: {max_}\nMinimum difference: {min_}')

Result:

All differences: [4, 6, 8, 12, 55, 2, 4, 8, 51, 2, 6, 49, 4, 47, 43]
Maximum difference: 55
Minimum difference: 2


来源:https://stackoverflow.com/questions/37775578/python-calculate-difference-between-all-elements-in-a-set-of-integers

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!