文字列の連結を比較することによって文字列の配列をソートしようとしているので、配列内のすべての文字列を連結すると、 。しかし、私はソート機能でエラーを取得しておく:ValueErrorを:ValueError:ラムダ関数の解凍には2つ以上の値が必要
nums = ['3', '30', '34', '5', '9']
nums.sort(key = lambda (x,y): cmp(x+y,y+x))
# should get me ['9', '5', '34', '3', '30']
# instead, gets me the exception ValueError: need more than 1 value to unpack
を解凍する必要以上の1価なぜこの出来事はありますか?ソート機能でこのような値を比較することはできませんか?問題は、https://leetcode.com/problems/largest-number/
キー機能は値そのものを取ります。比較のために2つの値をとる 'cmp'関数とは異なります。あなたのケースでは十分ではありませんが、 'key'は最近のほうがずっと簡単です。 [sorted](https://docs.python.org/2/library/functions.html#sorted)のドキュメントを参照してください。ドキュメントの状態は 'list.sort'と同じです。 –
このような状況では、cmpとは対照的にkeyを使用するには、正しい方法は 'sorted(nums、key = lambda x、y:y + x)'でしょうか?それは「価値そのものをとる」という意味ですか? – JohnDoe
いいえ、 'sort'によって呼び出される関数は、ソートのために現在考慮されているリスト内の要素である単一の引数だけを取ることを意味します。あなたのラムダは、 'lambda x:'形式でなければなりません。これは、並べ替える要素の値を取得する単なる方法です。 intのようなプリミティブを使用しているときは、キー関数は必要ありません。あなたは本当に値そのものをソートできるだけなので、キー関数は 'lambda x:x'のようになります。これはデフォルトの振る舞いにキーがないものです。 –