使用以下函数,我可以生成一些测试数据。
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
or t
。这些可以放在不同的组中。
我需要将列表分成尽可能多的非依赖组。
每个组将是该组所依赖的所有字母的集合。非依赖字母将是一组。
上面的一个示例输出是
[
['t'],
['b'],
['a','c','d','g','f','i','h','k','l','q','p','s','u','w','v','y', 'x','z']
]
我正在尝试编写一个函数来执行此操作,但无法找出正确分组所有内容的正确方法。