回答:
あなたが通過するときlambda
にsort
、あなたは整数ではなく、ブール値を返す必要があります。したがって、コードは次のように読み替える必要があります。
xs.sort(lambda x,y: cmp(len(x), len(y)))
cmpは組み込み関数でありcmp(x, y)
、x
がより小さい場合は-1 y
、x
が等しい場合は0、より大きいy
場合x
は1 を返すことに注意してくださいy
。
もちろん、代わりに次のkey
パラメータを使用できます。
xs.sort(key=lambda s: len(s))
これは、sort
キー関数が返すものに基づいて順序付けするようにメソッドに指示します。
編集:len
関数にキーパラメータとして直接渡すことができるため、以下のbalphaとRuslanに感謝しますlambda
。
xs.sort(key=len)
そして、Ruslanが以下で指摘するように、メソッドではなく組み込みのソート関数を使用することもできますlist.sort
。これは、既存のリストをインプレースでソートするのではなく、新しいリストを作成します。
print(sorted(xs, key=len))
xs.sort()
「:ソート()は位置引数をとらない例外TypeErrorが」スローします。代わりに、それがあるべきxs.sort(key=lambda x: len(x))
Eliの回答と同じ- lambda
ここでは一部省略できるので、短い形式を使用します。
新しいリストを作成しています:
>>> xs = ['dddd','a','bb','ccc']
>>> sorted(xs, key=len)
['a', 'bb', 'ccc', 'dddd']
インプレースソート:
>>> xs.sort(key=len)
>>> xs
['a', 'bb', 'ccc', 'dddd']
xs.sort(key=len, reverse=True)
ソート中にpythonic key関数がどのように機能するかを追加したいと思います:
装飾、並べ替え、装飾なしのデザインパターン:
装飾がソート、デコレートされていないデザインパターンとして知られているものを使用してソートが実装されているときのPythonのキー関数のサポート。
3つのステップで進行します。
リストの各要素は、要素に適用されたキー関数の結果を含む「装飾」バージョンに一時的に置き換えられます。
リストは、キーの自然な順序に基づいてソートされます。
装飾された要素は、元の要素に置き換えられます。
比較を行う前に各リスト要素で呼び出される関数を指定するキーパラメータ。docs
文字列のリストを長さに基づいてソートする関数lensortを記述します。
def lensort(a):
n = len(a)
for i in range(n):
for j in range(i+1,n):
if len(a[i]) > len(a[j]):
temp = a[i]
a[i] = a[j]
a[j] = temp
return a
print lensort(["hello","bye","good"])
関数を使用して、以下の2つの方法でそれを行うことができます
def lensort(x):
list1 = []
for i in x:
list1.append([len(i),i])
return sorted(list1)
lista = ['a', 'bb', 'ccc', 'dddd']
a=lensort(lista)
print([l[1] for l in a])
Lambdaを使用する1つのライナーでは、以下のように、すでに上記で回答済みです。
lista = ['a', 'bb', 'ccc', 'dddd']
lista.sort(key = lambda x:len(x))
print(lista)
lambda
。使用するだけkey = len