gpt4 book ai didi

python 排序两个列表 - zip、sort、zip - 不可排序的类型 : int() < NoneType()

转载 作者:行者123 更新时间:2023-11-28 22:39:35 29 4
gpt4 key购买 nike

我有两个列表:

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

我想对a_list和c_list进行排序,使其按照a_list的顺序排列。所以在排序之后我想要:

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

我正在尝试使用 zipsortzip 方法来做到这一点,但它在以下阶段给我错误消息:

a_c_zip = sorted(zip(a_list,c_list))

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

我认为发生这种情况是因为两个 a 值不明确,但我想知道是否有解决方法?毕竟排序 a_list 没有任何问题

我真的不想编写自己的排序例程,因为它会很慢。

最佳答案

您需要指定要排序的键。如果您不关心两个“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 按元素的值从左到右对可迭代对象进行排序的事实:

>>> sorted(zip(a_list, c_list),
key=lambda pair: (pair[0], ['' if elem is None else str(elem) for elem in pair[1]]))
[('a', [None, None]), ('a', ['f', None]), ('k', [13, None])]

或者类似的东西。

你得到 TypeError 的原因是 sorted尝试比较 ('a', [None, None])反对('a', ['f', None]) .由于两个元组的第 0 个元素相同,因此必须比较第 1 个元素。由于两者都有一个可迭代的第一个元素,它比较 [None, None]反对['f', None]元素地。但要这样做,它必须比较 'f'反对None , 和 you can't compare None against stuff in Python 3 (虽然你可以在 Python 2 中)。

关于python 排序两个列表 - zip、sort、zip - 不可排序的类型 : int() < NoneType(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34621526/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com