2014-11-25 240 views
0

我有一個關於邏輯及其關係的任務,並且在算法的某個步驟中,我必須能夠按照字符串和字符串列表按字母順序排序列表。按字母順序排序字符串和Python中的字符串列表

例如,像

[['not', 'D'], ['not', 'C'], 'B', 'A'] 

應該成爲

['A', 'B', ['not', 'C'], ['not', 'D']] 

,使得單元串(命題)扎堆與字符串列表的第二個元素(不是象徵着整理一個命題的否定並且是不變的)。

到目前爲止,我能夠使用sorted(List, key=itemgetter(0,1)),但這只是這個非常特殊情況下的一個技巧,甚至在字符串是文字時都不起作用,就像上面的示例一樣。請注意,字符串可能是'B'或'香蕉',後者是我的快速修復工程。

我很感謝您的幫助,因爲我無法在這裏找到的所有問題中找到解決方案。

編輯:

另一個例子是,

[['not', 'Pours'], ['not', 'Outside'], 'Rusty', 'Rains'] 

應該成爲

['Rains', 'Rusty', ['not', 'Outside'], ['not', 'Pours']] 

但我真的試圖從我提出的一般情況下,去創造更大的話,它確實工作。所以我猜這個'不'在這裏有一些影響力。

也就是說,

[['not', 'Dinossaur'], ['not', 'Carriage'], 'Banana', 'Apocalypse'] 

實際上得到正確的形式與@ inspectorG4dget友情提供的建議。

回答

1
>>> L = [['not', 'D'], ['not', 'C'], 'B', 'A'] 
>>> L.sort(key=lambda x:(isinstance(x,str) and x) or x[1]) 
>>> L 
['A', 'B', ['not', 'C'], ['not', 'D']] 

編輯:

In [30]: L = [['not', 'D'], ['not', 'C'], 'B', 'A'] 

In [31]: L.sort(key=lambda x:(not isinstance(x,str), x if isinstance(x,str) else x[1])) 

In [32]: L 
Out[32]: ['A', 'B', ['not', 'C'], ['not', 'D']] 

In [33]: L = [['not', 'Pours'], ['not', 'Outside'], 'Rusty', 'Rains'] 

In [34]: L.sort(key=lambda x:(not isinstance(x,str), x if isinstance(x,str) else x[1])) 

In [35]: L 
Out[35]: ['Rains', 'Rusty', ['not', 'Outside'], ['not', 'Pours']] 
+0

非常感謝你的回答,這是很有啓發。 但是,我測試了它的情況下,字符串的維數高於1,並且列表出現在單位字符串之前。我相信基於類型的另一個條件是必需的,但不會損害字面的情況。你有什麼建議可以有效地應用它嗎? – Alegom 2014-11-25 05:28:09

+0

@Alegom:請編輯您的帖子,以包括您提到的問題以及預期/期望結果的示例 – inspectorG4dget 2014-11-25 05:42:34

+0

帖子已更新!我設法分兩步做,但我希望有一個步驟的想法。 – Alegom 2014-11-25 06:04:40

相關問題