次のような文字列のリストがあります:
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])]
説明:
zip
2つのlist
s。- 使用
list
に基づいて並べ替えられた新しいものを作成しますzip
sorted()
。 - リストの内包表記を使用して、ソートされ圧縮された から各ペアの最初の要素を抽出します
list
。
パラメータの設定方法key
やsorted
関数全般の詳細については、以下を参照してください。これ。