並列リストから対応する値に従ってリストをソートする [重複] 質問する

並列リストから対応する値に従ってリストをソートする [重複] 質問する

次のような文字列のリストがあります:

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"]

同じ「キー」を持つ要素の順序は重要ではありません。for構造を使用することもできますが、もっと短い方法があるかどうか知りたいです。何か提案はありますか?

ベストアンサー1

最短コード

[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. zip2つのlists。
  2. 使用listに基づいて並べ替えられた新しいものを作成しますzipsorted()
  3. リストの内包表記を使用して、ソートされ圧縮された から各ペアの最初の要素を抽出しますlist

パラメータの設定方法keysorted関数全般の詳細については、以下を参照してください。これ


おすすめ記事