2016-09-22 18 views
-5

文字列、浮動小数点数、および整数がある場所でリストをソートする方法はありますか?文字列、浮動小数点数、および整数があるリストをソート

私はlist.sort()メソッドを使用しようとしましたが、もちろん動作しませんでした。ここで

は、私は並べ替えたいリストの例である:

[2.0, True, [2, 3, 4, [3, [3, 4]], 5], "titi", 1] 

私はそれがフロートとint型で値で並べ替えることがしたい、その後、種類によってでしょう:山車とint型の最初の、そしてストリングス次に、ブール値を返し、リストを返します。私は、Python 2.7を使用したいが、私は...

期待出力することは許されないのです。

[1, 2.0, "titi", True, [2, 3, 4, [3, [3, 4]], 5]] 
+5

そして、どのように正確にあなたがそれを可能にするでしょうソート? –

+0

ハーフジョークの答え:整数と文字列の比較などが可能なPython 2.7への切り替え。 – Kevin

+0

Teemuが尋ねるように - 期待される出力は? –

答えて

1

Pythonの比較演算子が賢明互換性のない型の変数のために働くことを拒否します。あなたのリストをソートするための基準を決定し、それを関数にカプセル化し、keyオプションとしてsort()に渡します。次いで、内容物によって、第一のタイプによってソートする

l.sort(key=repr) 

:例えば、各要素(文字列)のreprによってソートする

l.sort(key=lambda x: (str(type(x)), x)) 

を後者は番号がソートされ得るという利点を有します数字列、アルファベット順の文字列などがあります。比較できないサブリストが2つある場合でも失敗しますが、次に何をすべきかを決定する必要があります。

+0

喜んで聞こえますが、免責事項に注意してください。ランダムな内容のサブリストをソートする必要がある場合は、特別なケースにする必要があります。 – alexis

+0

再帰的/動的アプローチがそのために働くでしょう。 –

+0

@Wayne、それのために行ってください。しかし、OPの予想と一致しない可能性があります。知るか。 – alexis

0

list.sortまたはsortedからkey -argumentは、あなたがそれを必要とする方法、それをソートするために使用することができ、最初にあなたが種類を注文する方法を定義する必要があり、最も簡単な(そしておそらく最速)をキーとして種類の辞書がありますそしてオーダー値として

# define a dictionary that gives the ordering of the types 
priority = {int: 0, float: 0, str: 1, bool: 2, list: 3} 

tupleslistsは、まず、第1の要素を比較して比較しているという事実を使用することができ、この作業を行うには、それはそれが等しいかどう第三の比較(そのため、第二の要素を比較等しい場合に)。

# Define a function that converts the items to a tuple consisting of the priority 
# and the actual value 
def priority_item(item): 
    return priority[type(item)], item 

最後に、あなたの入力を並べ替えることができ、私は、それがすでにソートですので、(私の知る限り、あなたの質問を理解して)、それをシャッフルするつもりです:

>>> l = [1, 2.0, "titi", True, [2, 3, 4, [3, [3, 4]], 5]] 
>>> import random 
>>> random.shuffle(l) 
>>> print(l) 
[True, [2, 3, 4, [3, [3, 4]], 5], 'titi', 2.0, 1] 

>>> # Now sort it 
>>> sorted(l, key=priority_item) 
[1, 2.0, 'titi', True, [2, 3, 4, [3, [3, 4]], 5]] 
関連する問題