将 str.lower 作为 key 传递给 list.sort 有什么作用?

Ari*_*lla 1 python sorting list

def Sorting(lst):
    lst.sort(key=str.lower)
    lst.sort(key=len)
    return lst

lst = ["Ronit", "Dan", "Yael"]
print Sorting(lst)
Run Code Online (Sandbox Code Playgroud)

此代码按字母顺序对列表进行排序,然后按长度进行排序。我想知道为什么会“低”?它不适用于大写字母吗?它是做什么用的?

cs9*_*s95 5

它执行不区分大小写的排序

让我们稍微修改一下您的示例,以包含另一个条目“dan”:

lst = ['Ronit', 'Dan', 'dan']
Run Code Online (Sandbox Code Playgroud)

自然地,您会期望“Dan”和“dan”一起出现。但由于字符串排序的特性,它们并没有这样做。相反,一个简单的list.sort调用会给你:

lst.sort()
print(lst)
['Dan', 'Ronit', 'dan']
Run Code Online (Sandbox Code Playgroud)

另一方面,指定str.lower给你这个:

lst.sort(key=str.lower)
print(lst)
['Dan', 'dan', 'Ronit']
Run Code Online (Sandbox Code Playgroud)

在这里,原始列表元素根据其小写等效项进行排序。

假设您了解其含义(是的,按长度排序) ,第二个list.sort调用len现在应该是不言自明的。key


要理解为什么在第二个之前需要第一个,请考虑另一个人为的示例:

lst = ['Ronit', 'Dan', 'ram', 'dan']
Run Code Online (Sandbox Code Playgroud)

首先,考虑key=len

lst.sort(key=len)
print(lst)
['Dan', 'ram', 'dan', 'Ronit']
Run Code Online (Sandbox Code Playgroud)

那个“公羊”在这里看起来不合适。这正是我们迈出第一步的原因。现在,添加该步骤使我们的输出更加合理。

lst.sort(key=str.lower)
lst.sort(key=len)

print(lst)
['Dan', 'dan', 'ram', 'Ronit']
Run Code Online (Sandbox Code Playgroud)

因此,总而言之,元素首先不区分大小写排序,然后按长度排序。