Python:计算一组整数中所有元素之间的差

Python:计算一组整数中所有元素之间的差,python,set,Python,Set,我想计算一组整数中所有元素之间的绝对差。我试图做abs(x-y)其中x和y是集合中的两个元素。我想对所有组合都这样做,并将结果列表保存在一个新的集合中。由于集合不保持顺序,您可以使用类似于的方法,并迭代到最后一个集合 我想计算一组整数(…)中所有元素之间的绝对差,并将结果列表保存在一个新的集合中 您可以使用: combines返回s中所有组合的r长度元组,无需替换,即: list(combinations(s, 2)) => [(9, 4), (9, 1), (9, 7), (4, 1),

我想计算一组整数中所有元素之间的绝对差。我试图做
abs(x-y)
其中
x
y
是集合中的两个元素。我想对所有组合都这样做,并将结果列表保存在一个新的集合中。

由于集合不保持顺序,您可以使用类似于的方法,并迭代到最后一个集合

我想计算一组整数(…)中所有元素之间的绝对差,并将结果列表保存在一个新的集合中

您可以使用:

combines
返回s中所有组合的r长度元组,无需替换,即:

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

为了完整起见,这里有一个基于Numpy
ndarray
的解决方案:


下面是另一个基于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)
data=np.array([33,22,21,1,44,54])
minn=np.inf
index=np.array(范围(data.shape[0]))
对于范围内的i(data.shape[0]):
to_sub=(索引[:i],索引[i+1:])
温度=np.abs(数据[i]-数据[np.hstack(to_sub)])
最低温度=np.min(温度)
如果最低温度<最低温度:最低温度=最低温度
打印(“最小差值为”,明尼苏达州)

输出:“最小差值为1”

以下是使用组合的另一种方法:

来自itertools导入组合的

def查找差异(lst):
“查找所有差异,最小和最大差异”
d=[i,j组合中的abs(i-j)(集合(lst),2)]
返回最小值(d),最大值(d),d
测试:

list of nums=[1,9,7,13,56,5]
最小、最大、差异=查找差异(列表)
打印(f'所有差异:{diff_}\n最大差异:{max_}\n最小差异:{min_}')
结果:

所有差异:[4,6,8,12,55,2,4,8,51,2,6,49,4,47,43]
最大差值:55
最小差值:2

由于python集合是无序的,因此没有“最后一个元素”。你可以在做你的事情之前把它转换成一个列表<代码>列表(yourset)通常,您可以将任何集合转换为列表,如
列表(myset)
中所示,然后使用列表算法。但是,如果您提供一个实际想要实现的示例,可能会有更好的方法。python集是“唯一元素的无序集合”。所以“python集合中的最后一个元素”没有任何意义@miraclixx我想计算一组整数中所有元素之间的绝对差。@LokeshMeher也许您可以提供一些示例输入和预期输出……有没有更快的方法?对于更大的场景,这需要花费太多的时间(>10秒)。
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}
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)