如何对字符串列表进行排序,以便开始字符串的大写数量是主要标准?
我有什么:
names = ["JOE", "Kate", "WILfried", "alfred", "denis"]
print sorted(names)
>>> ['JOE', 'Kate', 'WILfried', 'alfred', 'denis']
我想要的是什么:
>>> ['JOE', 'WILfried', 'Kate', 'alfred', 'denis']
修改
换句话说,我想:
(跟随至少一个小写角色的首都并不重要。)
答案 0 :(得分:3)
您可以使用:
print(sorted(names,key = lambda x: (not x.isupper(), x)))
>>> ['JOE', 'WILFRIED', 'Kate', 'alfred', 'denis']
更新:
...
答案 1 :(得分:3)
以下功能满足要求
l = ['JOE', 'Kate', 'WILfried', 'alfred', 'denis']
def k(x):
for i,j in enumerate(x):
if j.islower():
return (-i,x)
return (-len(x),x)
print(sorted(l,key=k))
这给出了以下输出:
['JOE', 'WILfried', 'Kate', 'alfred', 'denis']
函数k对出现在字符串开头的大写字母数量进行加权 编辑:感谢@jdeseha进行编辑
答案 2 :(得分:2)
这是一个(有点难看)的解决方案:
names = ['JOE', 'Kate', 'WILfried', 'alfred', 'denis']
k = lambda s: ([-i for i, u in enumerate(map(str.isupper, s)) if not u] or [-len(s)],
s.lower())
print sorted(names, key=k)
>>> ['JOE', 'WILfried', 'Kate', 'denis', 'alfred']
也许你想把lambda
作为一个正确的功能。