查找列表中的缺失字母(小写或大写,独占)

时间:2016-12-20 17:45:29

标签: python alphabet

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

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')

任何人都知道如何检查不管字母的情况吗?

5 个答案:

答案 0 :(得分:1)

您的规范需要进行2次更改:

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

  2. chars头部的角色开始检查 - 这样b, c, e的方式会导致d而非a

  3. 应该像:

    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]
    

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)


import string

def find_missing (txt):
    """Takes string or other type of iterable containing letters.
    Returns a list of all letters that aren't present in the input string/iterable.
    Missing letters are returned as lower case.
    """
    txt = (x.lower() for x in txt if x.isalpha()) # Generator object
    found = dict.fromkeys(string.ascii_lowercase, 0)
    for x in txt: found[x] = 1
    return [x for x in found if found[x]==0]

答案 3 :(得分:0)

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

  

查找()

如果字符串中缺少字母/单词,则

方法返回-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    

答案 4 :(得分:-2)

这将在连续字符列表中找到丢失的字符,如果没有丢失任何字符,则返回true。

def find_missing_letter(chars):
    for i in range(len(chars)-1):
        if ord(chars[i+1])!= ord(chars[i])+1:
            return chr(ord(chars[i])+1)
    return True