python排序两个列表-zip、sort、zip-无序类型:int()<;非类型()
我有两份清单:python排序两个列表-zip、sort、zip-无序类型:int()<;非类型(),python,sorting,Python,Sorting,我有两份清单: a_list = ['a', 'k', 'a'] c_list = [[None, None], [13, None], ['f', None]] 我想按照列表的顺序对列表和列表进行排序。因此,在分类之后,我希望: a_list = ['a', 'a', 'k'] c_list = [[None, None], ['f', None], [13, None]] 我正在尝试使用zip,sort,zip方法来执行此操作,但在以下阶段会显示错误消息: a_c_zip = sorte
a_list = ['a', 'k', 'a']
c_list = [[None, None], [13, None], ['f', None]]
我想按照列表的顺序对列表和列表进行排序。因此,在分类之后,我希望:
a_list = ['a', 'a', 'k']
c_list = [[None, None], ['f', None], [13, None]]
我正在尝试使用zip
,sort
,zip
方法来执行此操作,但在以下阶段会显示错误消息:
a_c_zip = sorted(zip(a_list,c_list))
TypeError: unorderable types: int() < NoneType()
a_c_zip=已排序(zip(a_列表,c_列表))
TypeError:无序类型:int()
我认为发生这种情况是因为两个a
值不明确,但我想知道是否有解决办法?毕竟,对列表进行排序没有任何问题
我真的不想编写自己的排序例程,因为它会非常慢。您需要指定要排序的键。如果您不关心两个“a”项的排序顺序,您可以告诉
排序的查看由zip
生成的每对中的第一个元素(其中每对包含a_list
中的一个元素,然后是c_list
中的一个元素)
如果您确实关心两个“a”项的排序方式(也就是说,您希望它们的排序方式取决于c_list
中相应的项),那么您需要弄清楚如何让None
、整数和字符串相互排序
一种可能性是将None
视为'
,将数字视为其字符串表示形式,并利用Python按元素值从左到右对iterables进行排序的事实:
>>> 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的原因是排序
试图将('a',[None,None])
与('a',[f',None])
进行比较。由于两个元组的第0个元素相同,因此必须比较第1个元素。由于这两个元素都有一个iterable作为第一个元素,因此它将[None,None]
与[f',None]
元素进行比较。但要做到这一点,它必须将'f'
与None
进行比较,并且(尽管您可以在Python 2中进行比较)。Python,因此未排序列表中的第一个“a”在排序列表中应该始终排在第一位。@senshin感谢您给出如此全面的答案。我在考虑尝试以下建议:
>>> 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])]