首页 > 解决方案 > 仅使用单个列表对单词进行所有可能的排列

问题描述

我对编码还不太了解(正在处理它),这是我第一次使用这个网站,但并不是我第一次使用这样的网站(所以对我来说放轻松,哈哈),我认为这将是最好的地方问。所以我现在想要完成的事情是尝试用每个可能长度的一组单词来使每个排列成为可能,而不会在一个结果中重复相同的单词。我找不到任何类似的东西,因为我见过的大多数人制作或想要的东西都有某种限制,他们只能在每个单词中制作特定数量的单词而不是所有可能的长度,例如,如果有五个单词,我希望结果每组包含所有可能的单词数量,这意味着我希望有一个、两个、三个、四个和五个单词的集合,

例如,每个数字都是每组单词的数量(它应该自动找到它以便它会执行每个长度)它应该以每组一个单词开始,每组以五个单词结束,而无需重复相同一组单词:

1

Alpha
Beta
Charlie
Delta

2

Alpha Beta
Alpha Charlie
Alpha Delta
Beta Alpha
Beta Charlie
Beta Delta
Charlie Alpha
Charlie Beta
Charlie Delta
Delta Alpha
Delta Beta
Delta Charlie

3

Alpha Beta Charlie
Alpha Beta Delta
Alpha Charlie Beta
Alpha Charlie Delta
Alpha Delta Beta
Alpha Delta Charlie
Beta Alpha Charlie
Beta Alpha Delta
Beta Charlie Alpha
Beta Charlie Delta
Beta Delta Alpha
Beta Delta Charlie
etc.
.
.
.

4

Alpha Beta Charlie Delta
Alpha Beta Delta Charlie
Alpha Charlie Beta Delta
Alpha Charlie Delta Beta
Alpha Delta Beta Charlie
Alpha Delta Charlie Beta
Beta Alpha Charlie Delta
Beta Alpha Delta Charlie
Beta Charlie Alpha Delta
Beta Charlie Delta Alpha
Beta Delta Alpha Charlie
Beta Delta Charlie Alpha
etc.
.
.
.

此外,我不想再让这变得太荒谬了,但是有没有一种方法可以过滤所有刚刚制作的线条,只提取其中有特定出现的线条?例如,仅拉出其中包含 Alpha 的行,这样如果我有:

Alpha Beta
Alpha Charlie
Alpha Delta
Beta Alpha
Beta Charlie
Beta Delta
Charlie Alpha
Charlie Beta
Charlie Delta
Delta Alpha
Delta Beta
Delta Charlie

我可以专门抓住:

Alpha Beta
Alpha Charlie
Alpha Delta
Beta Alpha
Charlie Alpha
Delta Alpha

所以,是的,这基本上就是我在这里想要完成的事情,据我所见,没有人做过这件事,或者至少从未要求过,我希望这不是在这里要求太多。预先感谢您提供的任何帮助,特别是如果您能给我一个代码或链接到可以完成所有这些的代码或链接。

标签: javapythonstringalgorithmpermutation

解决方案


在 python 中,itertools.permutations返回诸如名称列表之类的事物集合的固定长度排列。很容易编写自己的生成器来运行permutations你想要的每个长度。

import itertools

words = ["Alpha", "Beta", "Charlie", "Delta"]

def combos(collection):
    """Return all permutations of a collection from length 1 to 
    total length of the collection.
    """
    for r in range(1, len(collection) + 1):
        yield from itertools.permutations(collection, r)

for row in combos(words):
    print(" ".join(row))

这产生(有间隙)

Alpha
Beta
...
Alpha Beta
Alpha Charlie
...
Alpha Beta Charlie
Alpha Beta Delta
…
Alpha Beta Charlie Delta
Alpha Beta Delta Charlie
...

推荐阅读