>>> [0,1] < 2False
实现旧的Python 2行为的最佳方法是什么?
我已经尝试了子类化列表,但为了实现这一点,必须将每个嵌套列表强制转换为子类类型,以便所有嵌套比较都使用重写的比较方法.有没有办法实现这一点,而不是诉诸于递归地将每个嵌套列表转换为子类?
我希望能够像这样比较两个列表:
>>> a = [[[0,1],[2,3]],[0,1]]>>> b = [[0,3]]>>> a < bFalse
结果应为False,因为[0] [0]是一个列表而b [0] [0]是一个int,在我的情况下,int应始终被认为小于列表.
编辑:
我正在寻找实现一个与内置的Python 3 List.sort相同的排序函数,除非将列表与float或int进行比较,在这种情况下,列表应始终被视为更大.
解决方法 自 as mentioned in the Python 2 docs:Most other objects of built-in types compare unequal unless they are
the same object; the choice whether one object is consIDered smaller
or larger than another one is made arbitrarily but consistently within
one execution of a program.
对象比较仅在两个对象属于同一类型时才有意义.依赖于[0,1]等表达式返回的值. 2不应该在程序中完成,这就是为什么从Python 3中删除了这种行为的原因.
为了进一步解释,如果你有列表[[[0,1]],这有两个要素:
[[0,3]]和[0,1].为了让python对它们进行排序,它按字典顺序比较它们的内部值,因为它们都是列表,第一个值为[0,1]和[2,3],第二个值为0和1.但是,它必须将[0,1]与0进行比较,它们的类型不同,因此,比较产生任意结果.
所以,这种分类是破碎的.
如上所述,如果你有一些可以有意义地排序的列表和一些不能排序的列表(由于上面的解释),一个简单的解决方案是捕获可能的异常然后返回False.
try: [0,1] < 2except 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.
如果你想产生一个有意义的排序(如果这实际上有意义),那么你必须定义一个关键函数,如前所述.但这可能相当复杂.也许从不同的角度看待你的问题会更好.
总结以上是内存溢出为你收集整理的按字典顺序在Python 3中对嵌套的混合数据类型列表进行排序全部内容,希望文章能够帮你解决按字典顺序在Python 3中对嵌套的混合数据类型列表进行排序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)