python - 句子中单词的递归排列

标签 python recursion permutation sentence

我想要recursively获取句子中单词的排列,将相邻单词从左到右分成两个一组。

举个例子,如果我考虑 a, B, c, D是 4 个单词,主句有 5 次出现这 4 个单词,如下所示:

主句:a + B + c + a + D

我会得到四个句子

c + a + B + c + a
a + B + c + a + D
a + B + c + a + B
B + c + a + B + c

它们都与主句的长度相同,并且应该注意的是主句中的最后一个单词,即 D仅出现一次且仅出现在 a 之后的句子末尾因为在主句中没有任何单词跟随。

最佳答案

您可以使用以下递归生成器函数:

def adjacent_combinations(sentence, target=None, length=0):
    if not target:
        for target in set(sentence):
            for combination in adjacent_combinations(sentence, target, 1):
                yield combination
    elif length == len(sentence):
        yield [target]
    else:
        for a, b in set(zip(sentence, sentence[1:])):
            if a == target:
                for combination in adjacent_combinations(sentence, b, length + 1):
                    yield [a] + combination

这样:

list(adjacent_combinations(['a', 'B', 'c', 'a', 'D']))

将返回:

[['B', 'c', 'a', 'B', 'c'],
 ['c', 'a', 'B', 'c', 'a'],
 ['a', 'B', 'c', 'a', 'B'],
 ['a', 'B', 'c', 'a', 'D']]

关于python - 句子中单词的递归排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52574197/

相关文章:

python - For 循环未迭代预期的时间量

Python - 在矩阵中制作相同值的链表

java - 递归得到n的回文

algorithm - Rutkowska 的位反转算法

python - 硬币所有组合 - 两种算法之间的奇怪差异

python - 来自函数打印的生成器

python - 在 Tkinter 中动态创建函数和绑定(bind)按钮

c - 仅使用递归来执行此操作

javascript 超出最大调用堆栈解释

c++ - 更新 std::set 以仅保留最小值