例えば,
python
1a_list=[4,3,2,0,4,5] 2b_list=['a','b','c','d','e','f']
があったときにb_listをa_listの降順でソートしたいのですが,どのようにすればよいでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
コード
python
1a = [4, 3, 2, 0, 4, 5] 2b = ["a", "b", "c", "d", "e", "f"] 3 4a, b = zip(*sorted(zip(a, b), reverse=True)) 5 6print(a) # (5, 4, 4, 3, 2, 0) 7print(b) # ('f', 'e', 'a', 'b', 'c', 'd')
コードの挙動
-
- 2つのリストをまとめて、タプルのリストにする。
zip(a, b)
[(4, 'a'), (3, 'b'), (2, 'c'), (0, 'd'), (4, 'e'), (5, 'f')]
↓
-
- ソートする。
sorted(zip(a, b), reverse=True)
[(5, 'f'), (4, 'e'), (4, 'a'), (3, 'b'), (2, 'c'), (0, 'd')]
↓
-
- タプルのリストから2つのリストに戻す。
zip(*sorted(zip(a, b), reverse=True))
[(5, 4, 4, 3, 2, 0), ('f', 'e', 'a', 'b', 'c', 'd')]
投稿2020/01/15 05:33
総合スコア21956
0
ソート後のインデックスを計算してそのインデックスで並び替えます。
書き方はいろいろありますが、標準の機能でやるとこんな感じになります。
python
1from operator import itemgetter 2 3a_list = [4, 3, 2, 0, 4, 5] 4b_list = ['a', 'b', 'c', 'd', 'e', 'f'] 5 6idx = sorted(enumerate(a_list), key=itemgetter(1), reverse=True) 7b_list = [b_list[i] for i, _ in idx] 8print(b_list) # => ['f', 'a', 'e', 'b', 'c', 'd'] 9 10
投稿2020/01/15 05:24
総合スコア30935
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/15 05:32
0
こんな方法とか。
python
1b_sorted=[b for a, b in sorted(zip(a_list, b_list), reverse=True)] 2print(b_sorted)
['f', 'e', 'a', 'b', 'c', 'd']
上記はbの値も影響してしまいます。
aの値だけでソートするならkeyを指定した方がいいですね。
python
1b_sorted=[b for a, b in sorted(zip(a_list, b_list), key=lambda ab: ab[0], reverse=True)] 2print(b_sorted)
['f', 'a', 'e', 'b', 'c', 'd']
投稿2020/01/15 05:24
編集2020/01/15 05:34総合スコア5406
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/15 05:25
2020/01/15 05:29
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/15 05:45