从Set X创建多集

时间:2018-04-23 17:54:44

标签: python multiset

在Multiset中,允许有多个元素

例如。如果X(法线组)= {0,2,4,7,10},那么ΔX(multiset)= {2,2,3,3,4,5,6,7,8,10}。

ΔX表示X

中点之间的所有(N 2)成对距离的多集

我怎么能用Python写这个?

我创建了一个List X但我不知道如何将所有差异放在另一个列表中并对它们进行排序。

我希望你能帮助我。

3 个答案:

答案 0 :(得分:1)

基本上只有一行。

import itertools

s = {0,2,4,7,10}
sorted([abs(a-b) for (a,b) in itertools.combinations(s,2)])

答案 1 :(得分:0)

一种简单的方法是将您的集转换为列表,对其进行排序,然后使用double for循环来计算差异:

X = {0,2,4,7,10}  # original set
sorted_X = sorted(list(X))
diffs = []
for i, a in enumerate(sorted_X):
    for j, b in enumerate(sorted_X):
        if j > i:
            diffs.append(b-a)           
print(diffs)
#[2, 4, 7, 10, 2, 5, 8, 3, 6, 3]

如果你想要对差异进行排序:

print(sorted(diffs))
#[2, 2, 3, 3, 4, 5, 6, 7, 8, 10]

在这种情况下可以使用的另一个选项是使用itertools.product

from itertools import product
print(sorted([(y-x) for x,y in product(sorted_X, sorted_X) if y>x]))
#[2, 2, 3, 3, 4, 5, 6, 7, 8, 10]

答案 2 :(得分:0)

您可以使用itertools

import itertools

s = {0,2,4,7,10}
k = itertools.combinations(s,2)
distance = []
l = list(k)
for p in l:
    distance.append(abs(p[1]-p[0]))
print(sorted(distance))