簡體   English   中英

對整數和字符串的混合列表進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM