使用嵌套循环计数项目

时间:2015-03-28 20:35:24

标签: python nested-loops

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,这很奇怪。我的代码有问题吗?在此先感谢!!

1 个答案:

答案 0 :(得分:1)

if any(i in item for i in ("0", "1","2"):

您的代码实际上会为您的测试输入返回5,因为or 1将始终评估为True,您正在检查bool(1)并未实际检查是否1item中,您还要将intsstrings进行比较。

您可以使用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行。