对整数和字符串的混合列表进行排序
Sorting a mixed list of ints and strings
我正在尝试对以下整数和字符串的混合列表进行排序,但却得到了 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'
我从你的评论中看出你希望先对整数排序,然后对字符串排序。
所以我们可以对两个单独的列表进行排序并按如下方式连接它们:
x=[4,6,9,'ashley','drooks','chay','poo','may']
intList=sorted([i for i in x if type(i) is int])
strList=sorted([i for i in x if type(i) is str])
print(intList+strList)
输出:
[4, 6, 9, 'ashley', 'chay', 'drooks', 'may', 'poo']
您可以将自定义键函数传递给 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']
这个关键函数将列表中的每个元素映射到一个元组,其中第一个值是布尔值(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')]
然后使用这些元组对列表进行排序。因为 False < True
,这使得整数在字符串之前排序。然后将具有相同布尔值的元素按元组中的第二个值排序。
有功能键
def func(i):
return isinstance(i, str), i
stuff = ['Tractor', 184 ,'Lada', 11 ,'Ferrari', 5 , 'Chicken' , 68]
stuff.sort(key=func)
for x in stuff:
print(x)
将类型 str 更改为 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'
我从你的评论中看出你希望先对整数排序,然后对字符串排序。
所以我们可以对两个单独的列表进行排序并按如下方式连接它们:
x=[4,6,9,'ashley','drooks','chay','poo','may']
intList=sorted([i for i in x if type(i) is int])
strList=sorted([i for i in x if type(i) is str])
print(intList+strList)
输出:
[4, 6, 9, 'ashley', 'chay', 'drooks', 'may', 'poo']
您可以将自定义键函数传递给 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']
这个关键函数将列表中的每个元素映射到一个元组,其中第一个值是布尔值(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')]
然后使用这些元组对列表进行排序。因为 False < True
,这使得整数在字符串之前排序。然后将具有相同布尔值的元素按元组中的第二个值排序。
有功能键
def func(i):
return isinstance(i, str), i
stuff = ['Tractor', 184 ,'Lada', 11 ,'Ferrari', 5 , 'Chicken' , 68]
stuff.sort(key=func)
for x in stuff:
print(x)
将类型 str 更改为 int 以首先获取字符串。