2017-04-17 13 views
-2

私のコードは次のとおりです。Pythonコンパイラが動作しないのはなぜですか?次のように

data = [["456"], ["123"], ["987", "234"]] 
def comparator(array1, array2): 
    return array1[0] > array2[0] 
data.sort(comparator) 
print data 

私は、配列内の最初の値に基づいて並べ替えしようとしています。出力は:

[['456'], ['123'], ['987', '234']] 

なぜ私の関数は配列の配列をソートしないのですか?

+0

配列1と配列2は何ですか? – Aditya

+0

@ADITYAこれは、 'sort'によって関数に渡されるリスト内のリストです... – Li357

+0

それはなぜ機能するのですか?あなたは関数をソートするために何を期待しましたか? – abccd

答えて

1

からSorting Mini-HOW TO。 Py3.0で

、CMPパラメータは(リッチ比較およびCMP方法間の衝突 をなくし、言語を簡素化し、統一する大きな 努力の一環として)完全に除去しました。

Py2.xでは、sortは、比較を行う に対して呼び出すことのできるオプションの関数を許可しました。その関数は となるように2つの引数をとり、より小さい値の場合は負の値を返し、等しい場合は を返し、等しい場合は0を返します。より大きい値の正の値を返します。

ので、あなたはこれを試すことができます。

data=[['123'], ['45'], ['987', '234']] 
def comparator(array1, array2): 
    return int(array1[0]) - int(array2[0]) 
data.sort(comparator) 
print data 

それとも別の方法を:

>>> data=[['123'], ['45'], ['987', '234']] 
>>> data.sort(key=lambda x: int(x[0])) 
>>> data 
[['45'], ['123'], ['987', '234']] 
関連する問題