给出一些带有混合字母(大写和小写)的单词,这些单词也可能带有空格(但不是数字或特殊字符),我希望输出显示为大写字母(如果存在,则所有重复的字符)用小写字母(如果存在,则重复一个字符)。
字母顺序类似于AAaaBBbbCCcc.....
我尝试使用sorted
和list.sort
内置插件来做到这一点。
word = 'hoLllLywOoDo'
sorted_list = sorted(word ,key = lambda s: s.capitalize())
print(''.join(sorted_list))
例如,假设有hoLllLywOoDo
,我期望DhLLllOooowy
。而是返回DhLllLoOoowy
,这不是我想要的。
答案 0 :(得分:1)
在键函数中使用元组:
sorted_list = sorted(word ,key = lambda s: (s.upper(),s ))
当第一个参数相同时,元组的第二个参数将出现:这将首先按大写字母排序(将'D'
和'd'
相同),然后按字母排序( 'D'<'d'
-因此D排名第一)
您会得到:
DhLLllOooowy
str.capitalize
不是必需的,无论如何您都在处理单个字母-大写对单词来说是个好主意-可以在此处使用大写字母。
答案 1 :(得分:1)
由于您使用大写字母作为键,因此L
和l
具有相同的键。但似乎您想按字母排序,然后按大写字母排序。因此,您应该尝试使用像这样的元组来拥有“两个”键:
sorted_list = sorted(word, key = lambda s: (s.capitalize(), s))
答案 2 :(得分:0)
使用str.capitalize
意味着排序时唯一要考虑的是字母的大写形式。因此,对于排序算法,a
和A
将相等。
您可以通过告诉它使用大写版本和它的实际版本作为密钥来解决此问题
>>> ''.join(sorted(word, key=lambda c: (c.capitalize(), c)))
'DhLLllOooowy'