按字典顺序在Python 3中对嵌套的混合数据类型列表进行排序

按字典顺序在Python 3中对嵌套的混合数据类型列表进行排序,第1张

概述在 Python 3中,list.sort()方法将执行字典排序.但是在Python 3中,将列表与float或int进行比较会引发TypeError,与Python 2不同,您可以在其中执行此 *** 作: >>> [0, 1] < 2False 实现旧的Python 2行为的最佳方法是什么? 我已经尝试了子类化列表,但为了实现这一点,必须将每个嵌套列表强制转换为子类类型,以便所有嵌套比较都使用重写的 在 Python 3中,List.sort()方法将执行字典排序.但是在Python 3中,将列表与float或int进行比较会引发TypeError,与Python 2不同,您可以在其中执行此 *** 作:

>>> [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中对嵌套的混合数据类型列表进行排序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存