我想對列表進行排序。如何通過內部列表的排序索引對字符列表進行排序?
這裏是列表的我的輸入列表:
[('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')]
而且我所要的輸出是這樣
[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')]
我想對列表進行排序。如何通過內部列表的排序索引對字符列表進行排序?
這裏是列表的我的輸入列表:
[('H', 'A'), ('H', 'C'), ('H', 'K'), ('A', 'C'), ('A', 'K'), ('C', 'K')]
而且我所要的輸出是這樣
[('A', 'C'), ('A', 'H'), ('A', 'K'), ('C', 'H'), ('C', 'K'), ('H', 'K')]
你的輸出表明需要在元組和最後的兩個元素進行排序名單。所以只是做:
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
。
嗯,我以爲你使用了一個列表理解,很高興,現在我看到你使用了一個生成器表達式,現在我不開心...... :-)對於某些操作,列表理解將會快得多,因爲結果被轉換爲無論如何,一個列表。除'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
噢,right:'sorted'需要一次完整列表!將修復!我自己評論所有使用'str.join'的帖子。我無法習慣這個雙括號的東西。有一天必須要做某件事。由於'map'返回一個迭代器,所以''你的排序(映射)'解決方案也需要重建列表。 –
但是'iteration_utilities.chained(sorted,tuple)'不需要經過任何python層,因爲所有3個函數在C中實現。這提供了比一個輸入更多的加速。 – MSeifert
你可以嘗試這樣的事:
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')]
啊,你的意思是你要包含的元組也進行排序? –
你確定這是列表列表的語法嗎? – kouty
輸出顯示內部元組也需要排序。 –