Python:对字符串列表进行排序,这些字符串都是大写的firs

2024-05-16 12:05:01 发布

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

如何对字符串列表进行排序,使字符串开头的大写字母数成为主要标准?在

我所拥有的:

names = ["JOE", "Kate", "WILfried", "alfred", "denis"]

print sorted(names)

>>> ['JOE', 'Kate', 'WILfried', 'alfred', 'denis']

我想要的:

^{pr2}$

编辑

换句话说,我想:

  • 在第一个位置,对以n大写字母开头的字符串进行排序
  • 然后,对以n-1大写字母开头的字符串进行排序
  • “”“”“”“”“”“”“”“”“”“n-2“”“”
  • 等等

(至少一个小写字符后面的大写字母无关紧要。)


Tags: 字符串编辑列表标准names排序大写字母sorted
3条回答

您可以使用:

print(sorted(names,key = lambda x: (not x.isupper(), x)))
>>> ['JOE', 'WILFRIED', 'Kate', 'alfred', 'denis']

更新:

。。。在

以下功能满足要求

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

这将产生以下输出:

^{pr2}$

函数k赋予字符串开头出现的大写字母数的权重。
编辑:感谢@jdeseha的编辑

这里有一个(有点难看的)解决方案:

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作为一个适当的函数。在

相关问题 更多 >