Используя следующую функцию, я могу сгенерировать некоторые тестовые данные.
import random, string
a = list(string.ascii_lowercase)
def gen_test_data():
s = []
for i in xrange(15):
p = random.randint(1,3)
xs = [random.choice(a) for i in xrange(p)]
s.append(xs)
return s
Это мои тестовые данные.
[
['a', 's'],
['f', 'c'],
['w', 'z'],
['z', 'p'],
['z', 'u', 'g'],
['v', 'q', 'w'],
['y', 'w'],
['d', 'x', 'i'],
['l', 'f', 's'],
['z', 'g'],
['h', 'x', 'k'],
['b'],
['t'],
['s', 'd', 'c'],
['s', 'w', 'd']
]
Если буква разделяет список с другой буквой, она зависит от этой буквы и любой из этих букв от других зависимостей. Например
x
зависит от ['a','c','d','g','f','i','h','k','l','q','p','s','u','w','v','y', 'x','z']
Эти зависимости также являются двусторонними. k
зависит от всего, включая x
но x
не зависит от b
или t
. Их можно выделить в отдельные группы.
Мне нужно разделить список на МНОЖЕСТВО независимых групп, насколько это возможно.
Каждая группа будет набором всех букв, от которых зависит группа. Независимые буквы будут набором из одной.
Пример вывода для приведенного выше:
[
['t'],
['b'],
['a','c','d','g','f','i','h','k','l','q','p','s','u','w','v','y', 'x','z']
]
Я пытаюсь написать функцию для этого, но не могу понять, как правильно все сгруппировать.