在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但我不知道如何将所有差异放在另一个列表中并对它们进行排序。
我希望你能帮助我。
答案 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))