#code for sorting big integers
lis = ['234','5','2','12435645758']
lis.sort(key = lambda x: len(x))
print lis
#output ['5','234','12435645758']
lis.sort(key = lambda x: (len(x),x))
print lis
#output ['2','12435645758']
我试图在Python中对大数字字符串进行排序而不将字符串转换为整数,并且无法理解如何评估这些lambda表达式.
第一个lambda表达式是基于字符串的长度排序并对列表进行排序,但第二个表达式是什么?我想知道如何评估第二个lambda表达式.
最佳答案
lambda为列表中的每个值返回一个元组.然后使用这些元组来通知排序顺序.因此,不是将’234’与’5’进行比较,而是要求排序算法比较(3,’234′)和(1,’5′).
原文链接:https://www.f2er.com/python/438750.htmlPython对元组lexicographically进行排序,也就是说,首先比较两个元组的第一个元素,然后如果它们相同,则继续比较第二个元素等,直到没有要比较的元素为止.
因为元组同时保存长度和字符串本身,对于相等长度的字符串,字符串接下来按其实际值排序.这会在末尾放置较长的字符串,在前面放置较短的字符串,在每组长度相等的字符串中,字符串按其值排序.
再次查看输入示例,对于’234’和’5′,生成的元组(3,’5′)具有不相等的第一个元素,因此(1,’5′)在排序之前( 3,’234′).但是对于’5’和’2′,得到的元组是(1,’5′)和(1,’2′)(都是1个字符长),并且这些元组的第一个元素是相等的.所以它们在第二个元素上排序,在’5’之前加上’2′.
没有这样的断路器(所以键是相同的),Python保持相对顺序完整.对于你的第一个例子,sort键只是len(x),并且因为’5’和’2’具有相同的长度,并且没有别的东西可以比较它们,所以Python以相同的相对顺序将它们放入输出中,‘2’之前’5′.