2012-02-23 8 views
4

私はプロセスの一部としてリストをソートする必要があるインライン操作を実行しようとしています。 タイプオブジェクトのsortファンクションは、結果を返す代わりに呼び出されたリストで動作します。ソートされたリストを返すlist.sort()のバージョンはありますか?

Python docsこれを確認:

はlist.sort()
は場所で、リストのアイテムを並べ替えます。

私はPythonのコマンドラインを介してこれを試してみましたが、ここでの結果です:

>>> a = list("hello").sort() 
>>> print a 
None 
>>> b = list("hello") 
>>> print b 
['h', 'e', 'l', 'l', 'o'] 
>>> b.sort() 
>>> print b 
['e', 'h', 'l', 'l', 'o'] 

は、この問題を回避スキップして、次の可能な限りの行を作成する方法はありますか?

result = list(random.choice(basesalts)).sort() 

上記のコードを使用すると、自分のコードの長さと冗長性を減らすのに役立ちます。

+0

「リスト上で動作していたようです。それは間違っている。それは「そう思わない」。それはそのように定義されています。例外なく。それが動作するはずの方法です。 'list.sort()'は値を返しません。リストを変更します。 'result = .... sort()'は決して動作しません。定義により。 –

+0

"はこれを確認しているようです:"それは間違っています。彼らは実際にこれを確認します。 –

+0

ありがとうございました。 –

答えて

13

ありますビルトインsorted()

>>> a = sorted(list('hello')) 
>>> a 
['e', 'h', 'l', 'l', 'o'] 

はまた、あなたはもうlist()を必要としないことに注意してください:basesalts以来

>>> sorted('hello') 
['e', 'h', 'l', 'l', 'o'] 

は、文字列のリストのようです、あなただけ行うことができます:

result = sorted(random.choice(basesalts)) 

これがouあなたが探しているtput。

+4

'sorted(foo)'は本質的に 'temp = list(foo)です。 temp.sort(); return temp'という文字列を 'sorted()'に渡す前に文字列をリストに変換する必要はありません。 :-) – kindall

5

sortedを使用してください。

it iterableの項目から新しいソートリストを返します。

>>> a = sorted(list('hello')) 
>>> a 
['e', 'h', 'l', 'l', 'o'] 
>>> 

差ははlist.sort()メソッドは、リストに定義されていることです。対照的に、sorted()関数は任意の反復可能関数を受け入れます。

だから、あなたはこの素晴らしい記事Sorting Mini-HOW TOを見てみましょう

>>> a = sorted('hello') 
>>> a 
['e', 'h', 'l', 'l', 'o'] 
>>> 

を行うことができます。

0

あなたの友人はここに分類されています。リストクラスのメンバー関数ではなく、リストを引数として持つ組み込み関数です。

クラスリストにはソート機能はありません。

list1 = [ 1, 4, 5, 2] 
print sorted(list1) 

>> [1, 2, 4, 5] 
関連する問題