2013-07-03 19 views
48

我有價值觀是這樣的:排序的一組值

set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000']) 
set(['4.918859000', '0.060758000', '4.917336999', '0.003949999', '0.013945000', '10.281522000', '0.025082999']) 

我想在遞增的順序在每個set值進行排序。我不想在集合之間進行排序,而是在每個集合中進行排序。

+3

元組與這個問題有什麼關係,你試過了什麼? –

+3

我不認爲Python集有一個排序的概念。這可能會幫助你:http://stackoverflow.com/questions/1653970/does-python-have-an-ordered-set – zallarak

+2

一套是無序的。這是它的一個屬性。在每一種語言。使用'list'。 –

回答

105

從評論:

我想每一組排序。

這很簡單。對於任何設置s(或其他任何可迭代),sorted(s)返回s在排序順序元素的列表:

>>> s = set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000']) 
>>> sorted(s) 
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '10.277200999', '4.918560000'] 

注意sorted是給你一個list,而不是一個set。這是因爲在mathematicsalmost every programming language *中的集合的全部點是它沒有被排序:集合{1, 2}{2, 1}是相同的集合。


你可能真的不希望這些元素作爲字符串進行排序,但作爲數字(所以4.918560000將10.277200999來之前,而不是之後)。

最好的解決方案是最有可能將數字存儲爲數字而不是字符串在首位。但如果沒有,你只需要使用一個key功能:

>>> sorted(s, key=float) 
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '4.918560000', '10.277200999'] 

欲瞭解更多信息,請參閱Sorting HOWTO在官方文檔。


*請參閱特殊註釋。

+0

「這是因爲無論是在數學還是在每種編程語言中,集合的全部點都是它沒有排序」 - C++的std :: set是有序的。 –

+1

@TimothyShields:你說得對,我應該說「每一種不喜歡濫用常用術語的編程語言」。在「非修飾」意味着「變異」的語言中,「set」意味着「排序列表」,並且您必須說'unordered_set'意思是「設置」並不奇怪...... – abarnert

+1

無論這個名稱是好是壞isn沒有什麼需要討論的。 「從不以任何語言排序」的陳述是錯誤的。 –