我正在尝试编写一个函数,它可以生成最小的字母顺序,可以是小写字母,也可以是大写字母。因此,如果字符串包含按字母顺序排列的大写和小写字符,我必须返回字符串中首先出现的字符的值
现在,我的代码只接受一个小写的输入字符串,并从(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")
如果您想保留字母的大小写,则可以尝试如下smth:
如果你不在乎这个案子,那就
min(string.lower())
首先,不要只取小写字母,而是要取any字母。因此,将列表comp更改为:
然后,您希望在比较中忽略大小写,但仍然返回匹配的字母。为此,您可以为^{} 提供
key
参数:总而言之:
您想要使用一个
key
edmin
;这将允许您基于不区分大小写的值进行比较,同时返回原始大小写值:使用
default
意味着,如果字符串中没有大小写字符,min
可以帮助您返回空字符串,而不需要条件if/else
表达式。如果愿意,您可以使用str.lower
代替str.casefold
(后者更明确地说明了如何转换为普通大小写,并以不同的方式处理某些Unicode大小写)使用
default
并不是绝对必要的,但它允许您处理空的大小写,而不强制您创建临时列表(使用生成器表达式或filter
意味着您一次只处理一个字符,而不存储所有字符)。如果使用listcomp,则可以保留原始的min(...) if alphachars else ''
设计现有代码不起作用,因为它只在筛选列表comp中保留小写字符(大写字符被丢弃),如果不这样做,它将不会对剩余的内容执行不区分大小写的比较
相关问题 更多 >
编程相关推荐