python pangram跳过第二个字母

时间:2016-04-03 15:34:28

标签: python string python-2.7

这是我写的pangram的函数。 alpha[num]由于某种原因需要a,c,e,g等,而不是a,b,c,d,e等。

def ispangram(str1,alphabet=string.ascii_lowercase):

    alpha = []
    alpha += alphabet
    str1 = list(str1)
    for num in range(0,25):
        print num
        print alpha[num]
        for equal in str1:
            print equal
            if alpha[num] == equal:
                alpha.pop(num)
                print alpha
                break
            else:
                continue

    if alpha == none:
        print 'true'
    else:
        print 'false'

1 个答案:

答案 0 :(得分:2)

你在迭代它时修改alphabet,这导致了你的失误。

但是,这段代码可以大大简化,同时提高性能。而不是双重迭代,将您的字母保存到set,并迭代字符串,删除您遇到的每个字符(set中的O(1)操作)。当您完成迭代后,如果set为空,则表示您已经遇到字母表中的每个字母,这使得该字符串变为pangram:

def ispangram(str1, alphabet = string.ascii_lowercase):

    alpha = set(alphabet)
    for ch in str1:
        if ch in alpha:
            alpha.remove(ch)

    return len(alpha) == 0

修改
实际上,更优雅的是,您可以将两个字符串转换为set并减去它们:

def ispangram(str1, alphabet = string.ascii_lowercase):

    alpha = set(alphabet)
    alpha -= set(str1)

    return len(alpha) == 0

或者,作为oneliner:

def ispangram(str1, alphabet = string.ascii_lowercase):
    return len(set(alphabet) - set(str1)) == 0