两个列表的排列,但它必须是交替的辅音和元音
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'}
我有字符串 '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'}