如何生成大写或小写字母中最小的字母?

2024-06-01 13:34:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个函数,它可以生成最小的字母顺序,可以是小写字母,也可以是大写字母。因此,如果字符串包含按字母顺序排列的大写和小写字符,我必须返回字符串中首先出现的字符的值

现在,我的代码只接受一个小写的输入字符串,并从(a-z)中找到最小的字母(按字母顺序排在第一)。但我不知道如何从那里开始

def smallest_ignore_case(string):
    chars = [char for char in string if char.islower()]
    return min(chars) if chars else ""

我应该得到的输出:

assert(smallest_ignore_case("Hello World") == "d")
assert(smallest_ignore_case("HeLLo WorLD") == "D")
assert(smallest_ignore_case("What an AARDVARK!") == "a")

Tags: 函数字符串stringif顺序字母assert字符
3条回答

如果您想保留字母的大小写,则可以尝试如下smth:

min_letter = min(string.lower())  # get min letter regardless the case
for l in string:
    if l.lower() == min_letter:
        return l

如果你不在乎这个案子,那就min(string.lower())

首先,不要只取小写字母,而是要取any字母。因此,将列表comp更改为:

chars = [char for char in string if char.isalpha()]

然后,您希望在比较中忽略大小写,但仍然返回匹配的字母。为此,您可以为^{}提供key参数:

return min(chars, key=str.lower) if chars else ""

总而言之:

def smallest_ignore_case(string):
    chars = [char for char in string if char.isalpha()]
    return min(chars, key=str.lower) if chars else ""

您想要使用一个keyedmin;这将允许您基于不区分大小写的值进行比较,同时返回原始大小写值:

def smallest_ignore_case(string):
    alphachars = (let for let in string if let.isalpha())  # or filter(str.isalpha, string)
    return min(alphachars, key=str.casefold, default='')

使用default意味着,如果字符串中没有大小写字符,min可以帮助您返回空字符串,而不需要条件if/else表达式。如果愿意,您可以使用str.lower代替str.casefold(后者更明确地说明了如何转换为普通大小写,并以不同的方式处理某些Unicode大小写)

使用default并不是绝对必要的,但它允许您处理空的大小写,而不强制您创建临时列表(使用生成器表达式或filter意味着您一次只处理一个字符,而不存储所有字符)。如果使用listcomp,则可以保留原始的min(...) if alphachars else ''设计

现有代码不起作用,因为它只在筛选列表comp中保留小写字符(大写字符被丢弃),如果不这样做,它将不会对剩余的内容执行不区分大小写的比较

相关问题 更多 >