【问题标题】:In order combinations given a string按给定字符串的顺序组合
【发布时间】:2021-12-02 15:26:36
【问题描述】:

我正在尝试创建所有可能的单词音节组合。

例如,我有一个单词overflowing,我有一个它的音节列表['o', 'ver', 'flow', 'ing']。我希望输出显示组合音节以构成单词的所有可能组合:[('o', 'ver', 'flow', 'ing'), ('o', 'verflow', 'ing'), ('o', 'verflowing'), ('overflowing'), ('over', 'flow', 'ing'), ...]

这是我的尝试:

syllable_list = ['o', 'ver', 'flow', 'ing']
list_length = len(syllable_list)
for x in range(0, list_length):
    for y in range(0, list_length):
        if syllable_list[y:x+1]:
            before = ""
            middle = ""
            after = ""
            if syllable_list[0:y]:
                before = ["".join(syllable_list[0:y])]
            if syllable_list[x+1:]:
                after = ["".join(syllable_list[x+1:])]
            middle = ["".join(syllable_list[y:x+1])]
            print(before, middle, after)

输出是:

 ['o'] ['verflowing']
 ['over'] ['flowing']
['o'] ['ver'] ['flowing']
 ['overflow'] ['ing']
['o'] ['verflow'] ['ing']
['over'] ['flow'] ['ing']
 ['overflowing']
['o'] ['verflowing']
['over'] ['flowing']
['overflow'] ['ing']

所有组合都在那里,有一些重复,我错过了['o', 'ver', 'flow', 'ing'] 案例。我究竟做错了什么?是否有一个库已经处理了这个问题,所以我不必重新创建轮子?

【问题讨论】:

标签: python combinations


【解决方案1】:

您可以使用递归生成器,它将任意两个连续元素组合起来进行下一级递归:

>>> def generate(parts, start=0):
...     yield parts
...     for i in range(start, len(parts)-1):
...         yield from generate([*parts[:i], parts[i]+parts[i+1], *parts[i+2:]], start=i)
... 
>>> from pprint import pprint
>>> pprint(list(generate(['o', 'ver', 'flow', 'ing'])))
[['o', 'ver', 'flow', 'ing'],
 ['over', 'flow', 'ing'],
 ['overflow', 'ing'],
 ['overflowing'],
 ['over', 'flowing'],
 ['o', 'verflow', 'ing'],
 ['o', 'verflowing'],
 ['o', 'ver', 'flowing']]

【讨论】:

    【解决方案2】:

    由于您只定义了 3 个变量(After、middle 和 before),您无法获得超过 3 个字符串的输出。

    您的代码将始终连接至少 2 个字符串。

    你需要找到另一种方法来做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2020-08-05
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 2018-05-29
      相关资源
      最近更新 更多