如何按字母顺序排序包含大小写的字符串列表?

3
我有如下代码:
v = ['zack', 'timor', 'Topher']
v.sort()
print(v)

['Topher', 'timor', 'zack']

我想要得到的是:

['timor','Topher','zack']

这是正确的字母顺序。

基本上它应该忽略大小写字母之间的差异。 我不能只使用lower()函数,因为 ['timor','topher', 'zack'] 不是期望输出结果.

简单来说,我希望按照以下规则进行比较: a=A, b=B, ... 我该怎么做呢?


你可以使用更复杂的map函数,基本上记住哪些单词被更改了,对它们进行排序并将它们改回来。你可以在Python中使用一个二维数组和排序两个数组来实现这一点。如果需要,我可以写出答案。 - gnahum
3个回答

8

4

您可以为排序指定一个关键函数。这将为此数据执行操作:

v = ['zack', 'timor', 'Topher', 'Quark', "quark"]
v.sort( key= lambda x: x.lower())
print(v)

v = ['zack', 'timor', 'Topher', 'Quark', "quark"]
v.sort( key= lambda x: (x.lower(), x[0].isupper()))  # this will sort lower before upper
print(v)

['Quark', 'quark', 'timor', 'Topher', 'zack']  # keep original order
['quark', 'Quark', 'timor', 'Topher', 'zack']  # always lower before upper, only 1st char

v.sort(key=lambda x: x.lower())会进行稳定排序,也就是说对所有元素进行小写化,并保持原始列表的出现顺序。

请参阅:


1
在你的排序中添加一个键,例如:
def case_insensitive_sort(a):
    return a.lower()

v = ['zack', 'timor', 'Topher']
v.sort(key=case_insensitive_sort)
print(v)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接