Aay*_*ush -1 python sorting mixed list python-3.x
我试图排序以下混合的int和字符串列表,但改为获取TypeError.我想要的输出顺序是排序整数然后排序字符串.
x=[4,6,9,'ashley','drooks','chay','poo','may']
>>> x.sort()
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
x.sort()
TypeError: '<' not supported between instances of 'str' and 'int'
Run Code Online (Sandbox Code Playgroud)
Ara*_*Fey 10
您可以将自定义键功能传递给list.sort:
x = [4,6,9,'ashley','drooks','chay','poo','may']
x.sort(key=lambda v: (isinstance(v, str), v))
# result:
# [4, 6, 9, 'ashley', 'chay', 'drooks', 'may', 'poo']
Run Code Online (Sandbox Code Playgroud)
这个键函数将列表中的每个元素映射到一个元组,其中第一个值是布尔值(True对于字符串和False数字),第二个值是元素本身,如下所示:
>>> [(isinstance(v, str), v) for v in x]
[(False, 4), (False, 6), (False, 9), (True, 'ashley'), (True, 'chay'),
(True, 'drooks'), (True, 'may'), (True, 'poo')]
Run Code Online (Sandbox Code Playgroud)
然后使用这些元组对列表进行排序.因为False < True,这使得整数在字符串之前排序.具有相同布尔值的元素然后按元组中的第二个值排序.