Python 3.x 如何临时启用字符串和数字比较?
给出这个简化的排序示例:Python 3.x 如何临时启用字符串和数字比较?,python-3.x,compare,Python 3.x,Compare,给出这个简化的排序示例: l = [10, '0foo', 2.5, 'foo', 'bar'] 我想对l进行排序,这样数值总是在字符串之前。在本例中,我希望得到[2.5,10,'0foo','foo','bar']。是否可以使数值和字符串暂时可比(字符串总是大于数值) 注意:如果您正在考虑,为排序的提供键功能并不容易。例如,将数字转换为字符串将不起作用,因为“10”“2.5”执行此操作的方法可能涉及将键传递到排序。看起来是这样的: sorted(l, key=lambda x:(isinst
l = [10, '0foo', 2.5, 'foo', 'bar']
我想对l
进行排序,这样数值总是在字符串之前。在本例中,我希望得到[2.5,10,'0foo','foo','bar']
。是否可以使数值和字符串暂时可比(字符串总是大于数值)
注意:如果您正在考虑,为排序的
提供键
功能并不容易。例如,将数字转换为字符串将不起作用,因为“10”
“2.5”
执行此操作的方法可能涉及将键传递到排序。看起来是这样的:
sorted(l, key=lambda x:(isinstance(x str), x))
sorted(l,key=lambda x:({int:0, float:0, str:1, list:2, set:3}[type(x)], x))
这是因为键返回一个具有x类型及其值的元组。因为元组的比较方式。首先比较索引0处的项目,如果它们相同,则比较下两个项目,如果它们也相同,则依此类推。这允许按类型(字符串或不是字符串)对值进行排序,如果值是类似类型,则按值排序
还可以处理其他类型的更健壮的解决方案可能会在键函数中使用字典,如下所示:
sorted(l, key=lambda x:(isinstance(x str), x))
sorted(l,key=lambda x:({int:0, float:0, str:1, list:2, set:3}[type(x)], x))
可以根据需要添加其他类型。请参阅--您可以提供比较function@LouFranco如何使用pandas.DataFrame(…).sort_值(…)
?此方法没有键
参数。这是一个好主意。但解决方案尚未奏效。这使得float和int之间的比较成了问题。例如,在您的解决方案中,1
的排序将大于2.5
,因为
是在
@RNA之后排序的。我相信,经过这一细微的修改,它应该可以正常工作。但它不是通用的。我必须指定所有类型。但你的解决方案指向正确的方向direction@RNA如果您正在排序的唯一非数字类型是字符串,那么第一段代码应该可以工作。