1. ホーム
  2. python

[解決済み] Pythonのリストを文字列の長さに基づいてソートする

2022-06-11 14:30:19

質問

文字列のリストを文字列の長さに基づいて並べ替えたいのです。以下のようにsortを使おうとしましたが、正しい結果を得られないようです。

xs = ['dddd','a','bb','ccc']
print xs
xs.sort(lambda x,y: len(x) < len(y))
print xs

['dddd', 'a', 'bb', 'ccc']
['dddd', 'a', 'bb', 'ccc']

何が問題なのでしょうか?

どのように解決するのですか?

を渡すと lambdasort に変更する場合、booleanではなくintegerを返す必要があります。 ですから、あなたのコードは次のようになります。

xs.sort(lambda x,y: cmp(len(x), len(y)))

なお cmp は組み込み関数で cmp(x, y) が -1 を返す場合 x よりも小さい場合 y の場合、0 x と等しい場合は0 y と等しい場合は1 x よりも大きい場合は y .

もちろん、代わりに key パラメータを使うこともできます。

xs.sort(key=lambda s: len(s))

これは sort メソッドに、key関数が返すものに基づいて順番を決めるように指示します。

EDIT: BalphaとRuslanの指摘に感謝します。 len を直接関数のキーパラメータとして渡せばよいということです。 lambda :

xs.sort(key=len)

また、以下でルスランが指摘しているように、組み込みの ソートされた 関数ではなく、組み込みの list.sort メソッドではなく、 関数を使用することで、既存のリストをインプレースでソートするのではなく、 新しいリストを作成します。

print(sorted(xs, key=len))