Создайте мультимножество из набора X

В мультисети допускается наличие нескольких элементов

Например. если X (нормальный набор) = {0,2,4,7,10}, то ∆X (мультисеть) = {2,2,3,3,4,5,6,7,8,10}.

∆X обозначает мультимножество всех (N 2) парных расстояний между точками в X

Как я могу написать это на Python?

Я создал Список X, но я не знаю, как поместить все различия в другой список и упорядочить их.

Я надеюсь, что вы можете мне помочь.

3 ответа

Это в основном только одна строка.

import itertools

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

Ты можешь использовать 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))

Простой способ - преобразовать ваш набор в список, отсортировать его, а затем использовать двойной цикл 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]
Другие вопросы по тегам