Pythonで最初の要素の出現回数に基づいてタプルをフィルタリングする方法
Pythonでは、タプルのリストを「最初の要素の値が特定の回数までしか出現しないように制限したい」というケースがあります。このような場合、シンプルな if 条件と反復処理、そして append メソッドを組み合わせることで簡単に実装できます。
サンプルコード
以下は、最初の要素ごとの出現回数をカウントし、指定した上限(ここでは1回)を超えるタプルを除外する例です。
my_list = [(21, 24), (13, 42), (11, 23), (32, 43), (25, 56),(73, 84), (91, 40), (40, 83), (13, 27)]
print("元のリスト:")
print(my_list)
my_key = 1
my_result = []
mems = dict()
for sub in my_list:
if sub[0] not in mems.keys():
mems[sub[0]] = 1
else:
mems[sub[0]] += 1
if mems[sub[0]] <= my_key:
my_result.append(sub)
print("フィルタリング後のタプル:")
print(my_result)
実行結果
元のリスト: [(21, 24), (13, 42), (11, 23), (32, 43), (25, 56), (73, 84), (91, 40), (40, 83), (13, 27)] フィルタリング後のタプル: [(21, 24), (13, 42), (11, 23), (32, 43), (25, 56), (73, 84), (91, 40), (40, 83)]
処理の流れの解説
まず、タプルのリストを定義し、コンソールに表示します。
許容する出現回数として、整数値「1」を変数
my_keyに代入します。結果を格納するための空のリストを用意します。
出現回数を記録するための空の辞書を作成します。
リスト内の各タプルを順番に走査し、そのタプルの0番目(最初)の要素が辞書のキーとして存在しない場合は、カウントを1として登録します。
すでにキーが存在する場合は、カウントを1ずつ増やしていきます。
カウントが
my_keyの値以下である場合のみ、そのタプルを結果リストに追加します。これにより、同じ最初の要素を持つタプルが上限を超えて含まれることを防げます。最終的に、フィルタリングされた結果がコンソールに出力されます。
補足:より簡潔な書き方
上記のコードは標準的な辞書操作で書かれていますが、collections.Counter を使うとさらに簡潔に記述できます。
from collections import Counter
my_list = [(21, 24), (13, 42), (11, 23), (32, 43), (25, 56), (73, 84), (91, 40), (40, 83), (13, 27)]
my_key = 1
counts = Counter()
my_result = []
for sub in my_list:
counts[sub[0]] += 1
if counts[sub[0]] <= my_key:
my_result.append(sub)
print(my_result)
この手法は、重複データの除去やログデータの整理など、キーの重複を一定件数に抑えたい場面で役立ちます。
-
Pythonで文字列内の最初のユニーク文字を見つける方法
文字列が与えられたとき、その中で最初に一度だけ出現する文字(ユニークな文字)を見つける問題を考えてみましょう。 例えば、文字列が people の場合、出現回数が1回である最初の文字は o です。この場合、そのインデックスである 2 を返します。もし該当する文字が文字列中に存在しない場合は、-1 を返します。 解法のアプローチ この問題は、以下の手順で効率的に解くことができます。 頻度マップ(辞書)を作成する 文字列内の各文字 c について処理を行う: c が頻度マップに存在しない場合は、キーとして追加し値を 1 に設定する すでに存在する場合は、そのカウントを +1 する 作成した頻
-
Pythonで同じ先頭要素を持つタプルの値を合計する方法
タプル(tuple)はPythonのコレクション(配列)の一種で、順序は保持されるものの、後から変更することができないデータ構造です。複数のタプルを扱う際に、最初の要素が同じタプル同士について、2番目の要素を合算したいというケースがよくあります。本記事では、そのような場合に活用できる2つの方法を具体的なコード例とともに解説します。方法1:map関数とforループを組み合わせるまず、タプルで構成されたリストを用意します。次に、リストを辞書型に変換することで、タプルの各要素を「キー」と「値」のペアとして関連付けられるようにします。そのうえでforループを使い、各キーに対応する値を順次加算していきま