2017-01-30 61 views
-1

我想對列表進行排序。如何通過內部列表的排序索引對字符列表進行排序?

這裏是列表的我的輸入列表:

[('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')] 

而且我所要的輸出是這樣

[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')] 
+0

啊,你的意思是你要包含的元組也進行排序? –

+0

你確定這是列表列表的語法嗎? – kouty

+0

輸出顯示內部元組也需要排序。 –

回答

3

你的輸出表明需要在元組和最後的兩個元素進行排序名單。所以只是做:

l = [('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')] 

print(sorted([tuple(sorted(x)) for x in l])) 

結果:

[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')] 

這個重建與你的元組列表,現在排序內,並執行對這些元組sort

+0

嗯,我以爲你使用了一個列表理解,很高興,現在我看到你使用了一個生成器表達式,現在我不開心...... :-)對於某些操作,列表理解將會快得多,因爲結果被轉換爲無論如何,一個列表。除'str.join'之外的'sorted'就是其中之一。如果你想得到更快:'sort(map(iteration_utilities.chained(sorted,tuple),lst))''(需要一個[外部庫](http://iteration-utilities.readthedocs.io/en/latest/ api/cfuncs.html#iteration_utilities.chained),但僅僅意味着一個「不錯的信息」:D) – MSeifert

+1

噢,right:'sorted'需要一次完整列表!將修復!我自己評論所有使用'str.join'的帖子。我無法習慣這個雙括號的東西。有一天必須要做某件事。由於'map'返回一個迭代器,所以''你的排序(映射)'解決方案也需要重建列表。 –

+0

但是'iteration_utilities.chained(sorted,tuple)'不需要經過任何python層,因爲所有3個函數在C中實現。這提供了比一個輸入更多的加速。 – MSeifert

0

你可以嘗試這樣的事:

data=[('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')] 


print(sorted(list(map(lambda i:(i[0],i[1]) if i[0]<i[1] else (i[1],i[0]),data)))) 

輸出:

[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')] 
相關問題