[英]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'
您可以將自定義鍵函數傳遞給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
,這使得整數在字符串之前排序。 然后具有相同布爾值的元素按元組中的第二個值排序。
我可以從您的評論中看到,您希望先對整數進行排序,然后再對字符串進行排序。
所以我們可以對兩個單獨的列表進行排序並將它們連接起來,如下所示:
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']
帶功能鍵
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 以首先獲取字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.