Генерировать все уникальные триплетыPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Генерировать все уникальные триплеты

Сообщение Anonymous »

Есть серия триплетов: < /p>

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12],[13, 14, 15]]
< /code>

(может быть длиннее этого). Все они уникальны. < /P>

Q: < /strong> Каков эффективный способ генерирования всех возможных комбинаций этих триплетов, так что ни один из элементов, которые не встречались ранее, «встретиться» снова?[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12],[13, 14, 15]]
[[1, 5, 9], [4, 8, 12], [7, 11, 15], [10, 14, 3],[2, 6, 13]]
[[1, 4, 7], [5, 8, 11], [9, 12, 15], [10, 13, 2],[14, 3, 6]]
< /code>

Но этот не будет работать: < /p>

[[1, 5, 9], [4, 6, 12], [7, 11, 15], [10, 14, 3],[2, 8, 13]]


Потому что 4 и 6 из второй триплета были в одной и той же триплете, в частности, в [4, 5, 6] из первой записи

Я думаю, что это можно сделать, чтобы выбрать случайный триплет с начальной последовательностью. Раньше, но это выглядит довольно неэффективно, и мне интересно, есть ли более приятный способ.import random
import itertools

z = list(range(1, 10))
group_size = 3
superset = list()

def check_not_met(x):
for i in superset:
if set(x).issubset(set(i)):
return False
return True

def check_not_anyone_met(x):
for i in itertools.combinations(x, 2):
if not check_not_met(i):
return False
return True

subsession_matrices = list()

def generating_subsession(seq):
subglobal = list()
while seq:
x = a[-group_size:]
if check_not_anyone_met(x):
subglobal.append(x)
else:
return False
del seq[-group_size:]
return subglobal

for j in range(10000):
a = z.copy()
random.shuffle(a)
subsession_matrix = generating_subsession(a)
if not subsession_matrix:
continue
else:
subsession_matrices.append(subsession_matrix)
superset.extend(subsession_matrix)

print(subsession_matrices)
< /code>

А вывод: < /p>

[[3, 7, 1], [8, 2, 4], [6, 5, 9]]
[[8, 1, 9], [3, 5, 2], [7, 6, 4]]
[[3, 8, 6], [1, 4, 5], [7, 2, 9]]
[[8, 5, 7], [1, 2, 6], [3, 9, 4]]


Подробнее здесь: https://stackoverflow.com/questions/525 ... e-triplets
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Генерировать все уникальные триплеты
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как пройти через все отдельные триплеты массива, так что они имеют формат (A, B, B)? Длина массива <= 10^6
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как пройти через все отдельные триплеты массива, так что они имеют формат (A, B, B)? Длина массива <= 10^6
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • C ++ STD :: Уникальные возвраты явно не уникальные результаты
    Anonymous » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как генерировать уникальные последовательности?
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»