python排序两个列表zip,sort,zip无序类型:int()<NoneType()

2024-04-25 07:09:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个清单:

a_list = ['a', 'k', 'a']
c_list = [[None, None], [13, None], ['f', None]]

我想把一份清单和一份清单按顺序排列。所以在分类之后,我想要:

^{pr2}$

我试图用zipsortzip方法来完成,但在以下阶段它会给我错误消息:

a_c_zip = sorted(zip(a_list,c_list))

TypeError: unorderable types: int() < NoneType()

我认为这是因为两个a值的模糊性造成的,但我想知道是否有解决办法?毕竟,排序一张清单没有任何问题

我真的不想写我自己的排序程序,因为它会非常慢。在


Tags: 方法none消息错误分类zipsort阶段
1条回答
网友
1楼 · 发布于 2024-04-25 07:09:07

您需要指定排序所依据的键。如果您不关心两个“a”项的排序顺序,您只需告诉sorted查看由zip生成的每对元素的第一个元素(其中每对元素包含一个来自a_list的元素,然后是一个来自c_list的元素)。在

>>> a_list = ['a', 'k', 'a']
>>> c_list = [[None, None], [13, None], ['f', None]]
>>> sorted(zip(a_list, c_list), key=lambda pair: pair[0])
[('a', [None, None]), ('a', ['f', None]), ('k', [13, None])]

如果您确实关心两个“a”条目是如何排序的(也就是说,您希望它们的排序方式取决于c_list)中的相应条目,那么您需要弄清楚None、整数和字符串如何相互排序。在

一种可能性是将None视为'',并将数字视为其字符串表示形式,并利用Python按元素值从左到右对iterable进行排序的事实:

^{pr2}$

或者是一些类似的东西。在

得到TypeError的原因是sorted试图比较('a', [None, None])和{}。由于两个元组的第0个元素相同,因此必须比较第一个元素。因为两个元素都有一个iterable作为第一个元素,所以它将[None, None]与{}元素进行比较。但要做到这一点,它必须将'f'与{}和{a1}进行比较(尽管在python2中可以这样做)。在

相关问题 更多 >