Python - 检测字母模式而不迭代所有可能的组合

问题描述 投票:0回答:1

对可能不太有用的标题表示歉意,我不知道如何将这个问题总结为一句话。

我正在尝试计算 Python 3.10 中一个单词有多少个“单位”长。一个“单位”是(C 表示辅音,V 表示元音)CV VC C V(后两者仅在无法配对时使用)。例如,“件”将为三个单位(

pi-e-ce
pi-ec-e
),“队列”将为四个单位 (
qu-e-u-e
),“灯罩”将为六个单位 (
la-m-p-s-ha-de
)。

我正在努力解决的是如何准确地检测这些单位而不需要迭代每对字母的每个元音和辅音的每个组合。通过迭代来做到这一点效率非常低,但以我目前对 Python 的了解,我想不出更好的办法了。解决这个问题的有效方法是什么?

作为一个额外的(可选)问题,如果引入二合字母,例如“gh”和“th”会怎样?这将使像“大腿”这样的单词(四个单位,

t-hi-g-h

)变成只有两个单位(
thi-gh
),但也会使锻炼变得复杂。

提前致谢!

python iteration
1个回答
0
投票
只需将列表中的所有内容分别转换为“V”或“C”即可。然后循环检查前 2 个字母。如果是“CV”或“VC”,则弹出列表,无论如何,再次弹出它。计算耗尽列表所需的迭代次数。

def units(word) -> int: word = ["V" if c in "aeiou" else "C" for c in word] cnt = 0 while word: if ''.join(word[:2]) in ('CV', 'VC'): word.pop(0) word.pop(0) cnt += 1 return cnt for word in ('queue', 'piece', 'lampshade'): print(word, units(word))
    
© www.soinside.com 2019 - 2024. All rights reserved.