例如,下面是一个调用,解释器在按照特定的优先顺序对字符串进行排序时通常会使用这个元组
sorted(s,key = lambda x:(x.isdigit() and int(x)%2==0, x.isdigit(),x.isupper(),x.islower(),x))
但是,当执行以下代码时,会产生以下输出:
这实际上是hackerrank上以下问题的解决方案:https://www.hackerrank.com/challenges/ginorts/problem
例如,下面是一个调用,解释器在按照特定的优先顺序对字符串进行排序时通常会使用这个元组
sorted(s,key = lambda x:(x.isdigit() and int(x)%2==0, x.isdigit(),x.isupper(),x.islower(),x))
但是,当执行以下代码时,会产生以下输出:
这实际上是hackerrank上以下问题的解决方案:https://www.hackerrank.com/challenges/ginorts/problem
2条答案
按热度按时间k3bvogb11#
它将比较lambda与
>
运算符的结果:这就像比较字符串。第一个不相等的元素决定结果。
kpbwa7wx2#
在列表的每个元素上调用
key
函数,它返回的值用作排序“键”(即作为比较值,而不是实际的列表元素)。排序函数等效于:
(扩展为带类型注解的函数
def
,以便我们更好地查看它返回的内容)所以我可以推断出你的列表是字符串;sorting key函数返回一个包含四个bool值的元组,这些值告诉我们这些字符串的不同属性为True/False值。
1.是个偶数。
1.它是任何一种数字。
1.全是大写字母。
1.全是小写的。
第五个值是字符串本身(将按字母顺序排序),比较元组时,首先比较第一个值,然后比较第二个值,以此类推,比较bool值时,
False
在True
之前,因此排序列表将按顺序分组到上述四个类别中;首先将偶数分组(在列表的末尾,因为True
在False
之后),然后是奇数,然后是大写字符串,然后是小写字符串,然后是其他所有字符串,在这些类别中,将按照字符串顺序进行排序(按字典顺序)。