Pythonでリストの中央からK個の要素を抽出する方法
はじめに
リストから中央付近のK個の要素を取り出したい場合、Pythonでは「//」演算子(切り捨て除算)とリストスライシングを組み合わせることで、シンプルかつ効率的に実現できます。
本記事では、具体的なサンプルコードとともに、その仕組みをわかりやすく解説します。
サンプルコード
my_list = [34, 56, 12, 67, 88, 99, 0, 1, 21, 11]
print("The list is : ")
print(my_list)
K = 5
print("The value of K is ")
print(K)
beg_indx = (len(my_list) // 2) - (K // 2)
end_indx = (len(my_list) // 2) + (K // 2)
my_result = my_list[beg_indx: end_indx + 1]
print("The result is : " )
print(my_result)実行結果
The list is : [34, 56, 12, 67, 88, 99, 0, 1, 21, 11] The value of K is 5 The result is : [67, 88, 99, 0, 1]
処理の流れと解説
まず対象となるリストを定義し、コンソールに表示します。
取得したい要素数Kを定義し、こちらもコンソールに表示します。
len()関数でリストの長さを取得し、「//」演算子を使って2で割ることで、リストの中央位置を求めます。
中央位置から「K // 2」を引いた値を開始インデックス(beg_indx)として変数に代入します。
同様に、中央位置に「K // 2」を加えた値を終了インデックス(end_indx)として別の変数に代入します。
リストスライシングを行い、開始インデックスから終了インデックスまでの範囲の要素にアクセスします。ここでend_indxに1を加えているのは、スライシングの終端が排他的(その位置自体は含まれない)であるためです。
抽出した結果を変数my_resultに代入します。
最後に、その結果をコンソールへ出力します。
補足ポイント
この手法では、リストの要素数が偶数の場合でも「//」による切り捨て除算のおかげで、常に中央寄りの位置からK個の要素を安定して取得できます。また、Kがリストの長さより大きい場合でもエラーにはなりませんが、取得できる要素数はリストの範囲内に制限される点に注意してください。
-
Pythonで最も頻出する上位K個の要素を求めるアルゴリズムを解説
問題概要 空ではない整数型の配列が与えられたとき、その中で最も頻繁に出現する上位k個の要素を返すことを考えます。 例えば、要素が [1,1,1,1,2,2,3,3,3] で k = 2 の場合、結果は [1, 3] となります。 解法のアプローチ この問題は、ハッシュマップ(辞書)を2つ使うことで効率的に解くことができます。全体の流れは以下の通りです。 出現回数の記録: 各数値の出現回数を最初のマップに記録します。 頻度ごとのグループ化: 「出現回数」をキー、「その回数で出現した数値のリスト」を値とする2つ目のマップを作成します。 頻度の高い順に抽出: 配列の長さから降順にループし、該当する
-
Pythonで辞書の要素を削除する方法|del文とclear()の使い方
Pythonでは、辞書(dict)から個別の要素だけを取り除くことも、中身をすべて空にすることもできます。さらに、たった1行の操作で辞書そのものを完全に削除することも可能です。 辞書全体を明示的に削除したい場合は、del文を使用します。 辞書を削除する3つの方法 del dict[key]:指定したキーに対応する要素を1つだけ削除します。 dict.clear():辞書オブジェクトはそのまま残し、格納されているすべての要素を削除して空の辞書にします。 del dict:辞書変数そのものを削除します。以降はその名前で辞書にアクセスできなくなります。 サンプルコード 以下は、それぞれの操作を実