質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

640閲覧

python3 listでlistをソートする

Spacekoki

総合スコア17

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/15 05:16

例えば,

python

1a_list=[4,3,2,0,4,5] 2b_list=['a','b','c','d','e','f']

があったときにb_listをa_listの降順でソートしたいのですが,どのようにすればよいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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')

コードの挙動

    1. 2つのリストをまとめて、タプルのリストにする。

zip(a, b)
[(4, 'a'), (3, 'b'), (2, 'c'), (0, 'd'), (4, 'e'), (5, 'f')]

    1. ソートする。

sorted(zip(a, b), reverse=True)
[(5, 'f'), (4, 'e'), (4, 'a'), (3, 'b'), (2, 'c'), (0, 'd')]

    1. タプルのリストから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

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Spacekoki

2020/01/15 05:45

一番動作が速かったのでベストアンサーにさせていただきました。
guest

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

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Spacekoki

2020/01/15 05:29

ありがとうございます。sortedの中では何を行っているのですか?
guest

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
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2020/01/15 05:25

あ、こっちでいいですね(でもkeyは指定した方が良い気がします。結果は微妙に変わります)。
shiracamus

2020/01/15 05:29

そうですね。bの値に引きづられますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問