在给定大小为n的列表中查找2^(n-1)个连接列表

我在 Python 中遇到一个问题:给定一个包含 n 个元素的列表,我想在列表中找到所有“连接”的元素组合。例如,给定list = ['a', 'b', 'c'],我想找到

['a', 'b', 'c']
['ab', 'c']
['a', 'bc']
['abc']

同样,给定list = ['a', 'b', 'c', 'd'],我想找到

['a', 'b', 'c', 'd']
['a', 'bc', 'd']
['a', 'b', 'cd']
['a', 'bcd']
['ab', 'c','d']
['ab', 'cd']
['abc', 'd']
['abcd']

给定一个包含 n 个元素的列表,将有 2^(n-1) 种组合。请问是否有任何提示可以帮助我解决这个问题?我应该使用递归吗?

回答

递归通常是最容易实现的。这是一个可以实现这一点的生成器函数:

def connect(lst):
    if not lst:
        yield []
    for i in range(1, len(lst) + 1):
        prefix = ''.join(lst[:i])
        for suffix_con in connect(lst[i:]): 
            yield [prefix] + suffix_con

该方法采用str.join列表的任何ed 前缀,并将其与从相应后缀递归获得的每组连接组合。

>>> list(connect(['a', 'b', 'c']))
[['a', 'b', 'c'], ['a', 'bc'], 
 ['ab', 'c'], 
 ['abc']]
>>> list(connect(['a', 'b', 'c', 'd']))
[['a', 'b', 'c', 'd'], ['a', 'b', 'cd'], ['a', 'bc', 'd'], ['a', 'bcd'], 
 ['ab', 'c', 'd'], ['ab', 'cd'], 
 ['abc', 'd'], 
 ['abcd']]


以上是在给定大小为n的列表中查找2^(n-1)个连接列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>