按字典顺序在Python 3中对嵌套的混合数据类型列表进行排序
在
Python 3中,list.sort()方法将执行字典排序.但是在Python 3中,将列表与float或int进行比较会引发TypeError,与Python 2不同,您可以在其中执行此操作:
>>> [0,1] < 2 False 实现旧的Python 2行为的最佳方法是什么? 我已经尝试了子类化列表,但为了实现这一点,必须将每个嵌套列表强制转换为子类类型,以便所有嵌套比较都使用重写的比较方法.有没有办法实现这一点,而不是诉诸于递归地将每个嵌套列表转换为子类? 我希望能够像这样比较两个列表: >>> a = [[[0,1],[2,3]],[0,1]] >>> b = [[0,3]] >>> a < b False 结果应为False,因为[0] [0]是一个列表而b [0] [0]是一个int,在我的情况下,int应始终被认为小于列表. 编辑: 我正在寻找实现一个与内置的Python 3 list.sort相同的排序函数,除非将列表与float或int进行比较,在这种情况下,列表应始终被视为更大. 解决方法
自
as mentioned in the Python 2 docs:
对象比较仅在两个对象属于同一类型时才有意义.依赖于[0,1]等表达式返回的值. 2不应该在程序中完成,这就是为什么从Python 3中删除了这种行为的原因. 为了进一步解释,如果你有列表[[[0,1]],这有两个要素: 所以,这种分类是破碎的. 如上所述,如果你有一些可以有意义地排序的列表和一些不能排序的列表(由于上面的解释),一个简单的解决方案是捕获可能的异常然后返回False. try: [0,1] < 2 except TypeError: # return or assign False. True is not actually meaningful. 或者,对于list.sort() try: x.sort() except TypeError: pass # Do nothing. Python would produce meaningless results,anyway. 如果你想产生一个有意义的排序(如果这实际上有意义),那么你必须定义一个关键函数,如前所述.但这可能相当复杂.也许从不同的角度看待你的问题会更好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |