Pythonでリスト内の要素の相対的な順序(順位)を求める方法
整数の要素を持つリストが与えられたとき、その要素同士の「相対的な順序」を求めることを考えます。これは、リストを昇順に並べ替えた場合に、各要素がどの位置(インデックス)に来るかを示すものです。
例えば [78, 14, 0, 11] を昇順に並べると [0, 11, 14, 78] となるため、元の各要素の相対的な順位はそれぞれ [3, 2, 0, 1] となります。本記事では、この相対順序を求める2つの方法を紹介します。
方法1:sorted() と index() を使う
まずリスト全体を sorted() で並べ替え、その結果に対して各要素の index() を求めます。リスト内包表記を使えば、元のリストの各要素についてソート後の位置を簡潔に取得できます。
サンプルコード
listA = [78, 14, 0, 11]
# 元のリストを表示
print("Given list is : \n", listA)
# sorted() と index() を使用
res = [sorted(listA).index(i) for i in listA]
# 結果を表示
print("list with relative ordering of elements : \n", res)実行結果
Given list is : [78, 14, 0, 11] list with relative ordering of elements : [3, 2, 0, 1]
この方法はシンプルで分かりやすい反面、要素ごとに毎回 sorted() と index() を実行するため、リストが大きくなると計算量が増えて非効率になる点に注意が必要です。
方法2:enumerate() と sorted() を使う
より効率的なのが、enumerate() と sorted() を組み合わせる方法です。ソート済みリストに対して enumerate() を適用し、「値 → 順位」の対応を辞書として作成します。その後、map() を使って元のリストの各要素を辞書から照会することで、相対順序を一括して取得できます。
サンプルコード
listA = [78, 14, 0, 11]
# 元のリストを表示
print("Given list is : \n", listA)
# sorted() と enumerate を使用
temp = {val: key for key, val in enumerate(sorted(listA))}
res = list(map(temp.get, listA))
# 結果を表示
print("list with relative ordering of elements : \n", res)実行結果
Given list is : [78, 14, 0, 11] list with relative ordering of elements : [3, 2, 0, 1]
この方法では辞書による参照が O(1) で行えるため、ソートの O(n log n) を除けば全体の処理が高速になり、大きなリストでも実用的です。
まとめ
リスト内の要素の相対的な順序を求めるには、手軽さ重視なら「sorted() + index()」、パフォーマンス重視なら「enumerate() + sorted() + 辞書」の組み合わせがおすすめです。用途やデータサイズに応じて使い分けましょう。
-
Pythonでリストから指定したインデックスの複数要素を削除する方法
Pythonのリストから単一の要素を削除するのは、del文とインデックスを組み合わせれば簡単に行えます。しかし、複数のインデックスに該当する要素をまとめて削除したいケースでは、少し工夫が必要です。本記事では、削除対象となるインデックスのリストを指定して、元のリストから該当する要素だけを取り除く方法を2つ紹介します。方法1:sorted()とdelを組み合わせるこのアプローチでは、まず削除したい位置(インデックス)を格納したリストを作成します。その後、降順にソートしてから後ろの要素から順に削除することで、削除処理中にインデックスがずれる問題を回避し、元のリストの構造を保ったまま安全に要素を削除で
-
要素の長さに基づいてリストをソートするPythonプログラム
この記事では、ユーザーが入力したリストを、各要素の長さ(文字数)に基づいてソートする方法を解説します。Pythonには標準で用意されている組み込み関数 sorted() を使うことで、シンプルなコードで実現できます。 例 入力::[mona,pp,aaa] それぞれの長さは [4,2,3] したがって、ソート後の並び順は [2,3,4] 出力::[pp,aaa,mona] アルゴリズム ステップ1: リストの要素を入力する。 ステップ2: sorted(A, key=len) 関数を適用する。 サンプルコード # リストをソートする def sortedlist(A): ne