两个列表的排列,但它必须是交替的辅音和元音

Permutations of two lists but it has to be alternating consonant and vowel

我有字符串 'BANANA'(可以是任何字符串)。

我想找到字符之间所有可能的排列,但它需要是一个辅音和一个元音交替排列。

到目前为止,我所取得的是正常的排列,但我正在努力处理交替部分。

from itertools import permutations
# Set for avoiding duplicates
return set([''.join(j) for i in range(1, len(string_) + 1) for j
            in permutations(string_, i)])

我期望的输出是:

['B', 'A', 'N', 'BA', 'AN', 'NA', 'BAN', 'BANA', etc]

但不是(因为它们会在辅音之后是辅音,或者在元音之后是元音)像:

['BN', 'NB', AA', etc]

在你的列表理解中,你可以过滤掉有连续元音或辅音的排列。

from itertools import permutations

VOWELS = {"A", "E", "I", "O", "U"}

string_ = "BANANA"

def is_alternating(text):
    def is_vowel(ch):
        return ch in VOWELS

    return all(
        is_vowel(text[index-1]) != is_vowel(text[index])
        for index in range(1, len(text))
    )

perms = set(
    [
        ''.join(j)
        for i in range(1, len(string_) + 1)
        for j in permutations(string_, i)
        if is_alternating(j)
    ]
)

print(perms)

输出

{'ANABA', 'BAN', 'ANANA', 'BANA', 'BANANA', 'AB', 'ANANAB', 'N', 'ABANAN', 'NABA', 'A', 'ANA', 'ABANA', 'ANAN', 'B', 'ANABAN', 'NAB', 'NAN', 'NABANA', 'AN', 'ABA', 'NABAN', 'BA', 'NANAB', 'ABAN', 'NANA', 'ANAB', 'NANABA', 'NA', 'BANAN'}