def count_vowel_phonemes(phonemes):
""" (list of list of str) -> int
Return the number of vowel phonemes in phonemes.
>>> phonemes = [['N', 'OW1'], ['Y', 'EH1', 'S']]
>>> count_vowel_phonemes(phonemes)
2
"""
number_of_vowel_phonemes = 0
for phoneme in phonemes:
for item in phoneme:
if 0 or 1 or 2 in item:
number_of_vowel_phonemes = number_of_vowel_phonemes + 1
return number_of_vowel_phonemes
描述: 元音音素是最后一个字符为0,1或2的音素。例如,BEFORE(B IH0 F AO1 R)这个词包含两个元音音素,而GAP(G AE1 P)这个词有一个。
该参数表示音素列表的列表。该功能是返回音素列表列表中的元音音素数。 基本上这个问题要求我计算这个列表中的位数,但我的代码仍然返回0,这很奇怪。我的代码有问题吗?在此先感谢!!
答案 0 :(得分:1)
if any(i in item for i in ("0", "1","2"):
您的代码实际上会为您的测试输入返回5
,因为or 1
将始终评估为True
,您正在检查bool(1)
并未实际检查是否1
在item
中,您还要将ints
与strings
进行比较。
您可以使用sum
将代码缩减为生成器表达式,并使用str.endswith
查找以0,1或2结尾的子元素:
return sum(item.endswith(("0","1","2")) for phoneme in phonemes for item in phoneme)
输出:
In [4]: phonemes = [['N', 'OW1'], ['Y', 'EH1', 'S']]
In [5]: count_vowel_phonemes(phonemes)
Out[5]: 2
使用or
进行测试的正确方法是:
if "0" in item or "1" in item or "2" in item:
等同于any
行。