2016-09-22 99 views
-5

有沒有一種方法在Python中排序列表中有字符串,浮點數和整數的列表?排序列表,其中有字符串,浮點數和整數

我試圖使用list.sort()方法,但它當然不起作用。

這是我想對列表排序的例子:

[2.0, True, [2, 3, 4, [3, [3, 4]], 5], "titi", 1] 

我想它的價值由花車和整數進行排序,然後按類型:花車和整數,然後再串,然後布爾和列表。我想使用Python 2.7,但我不能......

預期輸出:

[1, 2.0, "titi", True, [2, 3, 4, [3, [3, 4]], 5]] 
+5

,你想究竟它是排序? –

+0

半開玩笑的答案:切換到Python 2.7,其中允許比較整數和字符串等。 – Kevin

+0

Teemu詢問 - 您的預期產量是多少? –

回答

1

Python的比較明智的運營商拒絕爲不兼容的類型的變量的工作。決定排序列表的標準,將其封裝在函數中,並將其作爲key選項傳遞給sort()。例如,爲了由每個元件(字符串)的repr進行排序:

l.sort(key=repr) 

爲了通過型的第一排序,然後由內容:

l.sort(key=lambda x: (str(type(x)), x)) 

後者的優點是號碼得到分類的優點數字,按字母順序排列的字符串等等。如果有兩個無法比較的子列表,它仍然會失敗,但是您必須決定要做什麼 - 只要擴展您的鍵功能,無論您認爲合適。

+0

很高興聽到它,但請注意免責聲明:它只是將問題推下了一步。如果您需要使用隨機內容對子列表進行排序,則需要特別說明。 – alexis

+0

一個遞歸/動態的方法將爲此工作。 –

+0

@Wayne,爲它付出。但它可能不符合OP的預期。誰知道。 – alexis

0

key -argument到list.sortsorted可以用於你需要的方式對其進行排序,首先你需要確定你如何要訂購的類型,最簡單的(也可能最快)與類型作爲鍵的字典和秩序價值

# define a dictionary that gives the ordering of the types 
priority = {int: 0, float: 0, str: 1, bool: 2, list: 3} 

爲了使這項工作可以使用tupleslists首先比較的第一個元素進行比較,事實上,如果相等比較的第二個元素,如果這等於比第三(依此上)。

# Define a function that converts the items to a tuple consisting of the priority 
# and the actual value 
def priority_item(item): 
    return priority[type(item)], item 

最後,你可以整理你的輸入,我會重新洗牌,因爲它已經排序(據我理解你的問題):

>>> l = [1, 2.0, "titi", True, [2, 3, 4, [3, [3, 4]], 5]] 
>>> import random 
>>> random.shuffle(l) 
>>> print(l) 
[True, [2, 3, 4, [3, [3, 4]], 5], 'titi', 2.0, 1] 

>>> # Now sort it 
>>> sorted(l, key=priority_item) 
[1, 2.0, 'titi', True, [2, 3, 4, [3, [3, 4]], 5]] 
相關問題