2017-11-27 7 views
-5
class Solution(object): 
    def moveZeroes(self, nums): 
     nums.sort(key =lambda x : 1 if x == 0 else 0) 
     return nums 

私の関数は上記のようになります。 コードkey =lambda x : 1 if x == 0 else 0の仕組みがわかりません。Pythonのソートキーの操作

私はまたにラムダ関数を変更しようとしました:

def getKey(item): 
    if item == 0: 
     return 1 
    else: 
     return 0 

しかし、どのようにキー= 1または0を理解していないようだ、結果に影響を与えます。

+0

https://wiki.python.org/moin/HowTo/Sorting#Key_Functions – DeepSpace

+0

キー手段でソートキー機能によって与えられた値を項目の配置先として使用してソートします。この場合、「0」は「1」の前にあるので、キー「0」を生成するすべてのアイテムは、キー「1」を生成するすべてのアイテムよりも早く配置されます。 – khelwood

+0

あなたの元のデータを別のもの(この場合は '1'と' 0's)に "マッピング"する 'key'と考えてください。これらの '1'と' 0'はあなたが想像するようにソートされ、その後、初期のオブジェクトを明らかにするためにマッピングが逆にされますが、今回はソートされます。 –

答えて

0

@khelwoodと@Evからインスパイアされています。 Kounis、私は自分自身で答えを書こうとしました。

ラムダ関数は以下のように書き換えることができます:

def getKey(item): 
    if item == 0: 
     return 1 
    else: 
     return 0 

私たちのマップ機能のようなとき:

a = [1, 2, 0, 2, 0] 
print map(getKey, a) 

それは[0, 0, 1, 0, 1]

を結果とその後のソート機能は、元のソートされます上記の出力に基づいてリストを作成します。 moveZeroes関数を思い出してみましょう:

class Solution(object): 
    def moveZeroes(self, nums): 
     nums.sort(key =lambda x : 1 if x == 0 else 0) 
     return nums 

print Solution().moveZeroes([1, 2, 0, 2, 0]) 
output: [1, 2, 2, 0, 0] 
+0

の複製があります[this](https://repl.it/repls)/VerifiableGrotesqueBasilisk) –

0

ちょっとした説明があります。要素がソートされる前にデータにkeyが適用されます。通常は、lenのような要素を入れて、要素を互いに比較するのに役立ちます。

は、しかし、この場合には、それは基本的に 0 1の最高のキー値を与えて、その機能を利用していますし、残りはちょうど取得すると、リストの最後に、すべての 0 Sをもたらす価値 0です。 このリストは、実際にその操作の後にソートされていない理由は、単に 0 sが最後に固執だ

nums.sort(key =lambda x : 1 if x == 0 else 0)