Python 查找列表中缺少的字母(仅限小写或大写)

Python 查找列表中缺少的字母(仅限小写或大写),python,alphabet,Python,Alphabet,输入是一个列表,始终为小写或大写。在序列中,如果排序正确,则缺少一个字母。函数应将缺少的字母作为字符串输出返回。请参阅下面的代码,您会注意到我已经计算了小写列表中缺少的字母,计算完成了一半 import string def find_missing_letter(chars): for letter in string.ascii_lowercase: if letter not in chars: return letter[0] 测试示例

输入是一个列表,始终为小写或大写。在序列中,如果排序正确,则缺少一个字母。函数应将缺少的字母作为字符串输出返回。请参阅下面的代码,您会注意到我已经计算了小写列表中缺少的字母,计算完成了一半

import string 
def find_missing_letter(chars):
    for letter in string.ascii_lowercase:
        if letter not in chars:
            return letter[0]
测试示例:

test.assert_equals(find_missing_letter(['a','b','c','d','f']), 'e')
test.assert_equals(find_missing_letter(['O','Q','R','S']), 'P')

无论字母大小写,任何人都知道如何检查???

2您的规范需要更改:

  • 通过检查
    chars
    包含的字母类型来确定您的字符集

  • chars
    开头的字符开始检查-这样检查
    b、c、e将导致
    d
    而不是
    a

  • 应该是这样的:

    def find_missing_letter(chars):
        charset = string.ascii_lowercase if chars[0] >= 'a' else string.ascii_uppercase
        for letter in charset[charset.index(chars[0]):]:
            if letter not in chars:
                return letter[0]
    

    您的规格需要进行2项更改:

  • 通过检查
    chars
    包含的字母类型来确定您的字符集

  • chars
    开头的字符开始检查-这样检查
    b、c、e将导致
    d
    而不是
    a

  • 应该是这样的:

    def find_missing_letter(chars):
        charset = string.ascii_lowercase if chars[0] >= 'a' else string.ascii_uppercase
        for letter in charset[charset.index(chars[0]):]:
            if letter not in chars:
                return letter[0]
    

    无论大小写,这都应该有效。它甚至可以用于其他连续序列

    def missing_elements(L):
        start, end = L[0], L[-1]
        return sorted(set(range(start, end + 1)).difference(L))
    
    def find_missing_letter(chars):
        numbers = list(map(ord, chars))
        n = missing_elements(numbers)
        return chr(n[0])
    
    测试示例:

    chars = ['a','b', 'd']
    print(find_missing_letter(chars))
    
    输出:

    c


    无论大小写,这都应该有效。它甚至可以用于其他连续序列

    def missing_elements(L):
        start, end = L[0], L[-1]
        return sorted(set(range(start, end + 1)).difference(L))
    
    def find_missing_letter(chars):
        numbers = list(map(ord, chars))
        n = missing_elements(numbers)
        return chr(n[0])
    
    测试示例:

    chars = ['a','b', 'd']
    print(find_missing_letter(chars))
    
    输出:

    c


    您可以使用字符串模块和字符串查找方法查找丢失的字母。 在哪里

    查找()

    如果字符串中缺少字母/单词,则方法返回-1

    import string
    input_str=raw_input()
    output_str=""
    
    for letter in string.letters:
    
        if input_str.find(letter) ==-1:
            output_str=output_str+letter
    
    print output_str    
    

    您可以使用字符串模块和字符串查找方法查找丢失的字母。 在哪里

    查找()

    如果字符串中缺少字母/单词,则方法返回-1

    import string
    input_str=raw_input()
    output_str=""
    
    for letter in string.letters:
    
        if input_str.find(letter) ==-1:
            output_str=output_str+letter
    
    print output_str    
    

    你还没有完成一半-这对小写也不合适。你还没有完成一半-这对小写也不合适。这使得只有一个通过所有字符+一个半通过所有ascii。您的方式将通过所有ascii和所有字符。每次字母不在字符中时,都会遍历整个字符,并且总是遍历其中的一些字符。我说的是接线员。当您在中的列表([])中说“”时,将迭代iterable以检查“”是否在其中。因此,对于较大的字符,我的代码应该快一点,因为字母可能会重复很多次。这使得只有一个字符通过所有字符+一个半通过所有ascii。您的方式将通过所有ascii和所有字符。每次字母不在字符中时,都会遍历整个字符,并且总是遍历其中的一些字符。我说的是接线员。当您在中的列表([])中说“”时,将迭代iterable以检查“”是否在其中。因此,对于较大的字符,我的代码应该快一点,因为字母可能会重复很多次。+1!好把戏。但是你为什么用数字呢?你可以直接使用字母。set()不限于数字。这是因为我使用range来获取所有连续值。我很感谢你的投票是的,但您不必使用range()。我说得不对。另外,您确定这样包含所有小写和大写字母吗?您使用了“开始”和“结束”,但如果输入未排序怎么办?如果按升序排序呢?顺便说一句:我非常重视创造力。因此它是+1。此外,您的代码比原始代码有可能提高速度。+1!好把戏。但是你为什么用数字呢?你可以直接使用字母。set()不限于数字。这是因为我使用range来获取所有连续值。我很感谢你的投票是的,但您不必使用range()。我说得不对。另外,您确定这样包含所有小写和大写字母吗?您使用了“开始”和“结束”,但如果输入未排序怎么办?如果按升序排序呢?顺便说一句:我非常重视创造力。因此它是+1。此外,与原始代码相比,您的代码有可能提高速度。