1. ホーム
  2. python

[解決済み] 別のリストの値に基づいてリストをソートする

2022-03-19 16:57:01

質問

このような文字列のリストがあります。

X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0,   1,   1,   0,   1,   2,   2,   0,   1 ]

Yの値を使ってXをソートして次の出力を得る最短の方法は何ですか?

["a", "d", "h", "b", "c", "e", "i", "f", "g"]

同じquot;key"を持つ要素の順序は重要ではありません。私は for という構文がありますが、もっと手っ取り早い方法はないでしょうか。何かいい方法はないでしょうか?

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

最短のコード

[x for _, x in sorted(zip(Y, X))]

X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]

Z = [x for _,x in sorted(zip(Y,X))]
print(Z)  # ["a", "d", "h", "b", "c", "e", "i", "f", "g"]


一般的に言えば

[x for _, x in sorted(zip(Y, X), key=lambda pair: pair[0])]

説明しています。

  1. zip 両者 list s.
  2. を作成し、ソートされた list をベースに zip を使って sorted() .
  3. リスト内包の使用 抽出 の各ペアの最初の要素を、ソートされ圧縮された list .

の設定方法について詳しくは、こちらをご覧ください。 key パラメータと同様に sorted をご覧ください。 これ .