Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでタプルのリストから一意な数字を抽出・変換する方法


Pythonは多彩なデータ操作機能を備えており、リストやタプルといったデータ構造を柔軟に処理できます。本記事では、「数値ペアのタプルを要素として持つリスト」から、一意な数字(ユニークな桁)だけを抽出して変換する方法を2通り紹介します。

方法1:reモジュールとsetを組み合わせる

正規表現を扱うreモジュールには、パターンにマッチした部分を置換できるsub()関数が用意されています。リスト全体を文字列化した後、角括弧・丸括弧・カンマ・空白などを正規表現で取り除き、残った数字にset()を適用することで、重複のない数字のリストを得られます。

サンプルコード

import re

listA = [(21, 3), (13, 4), (15, 7), (8, 11)]
# 元のリストを表示
print("Given list : \n", listA)

# 括弧やカンマなどの記号を正規表現で除去
temp = re.sub(r'[\[\]\(\)]', '', str(listA))

# setで一意な数字のみを抽出し、int型に変換
res = [int(i) for i in set(temp)]

# 結果を表示
print("List of digits: \n", res)

実行結果

Given list :
[(21, 3), (13, 4), (15, 7), (8, 11)]
List of digits:
[1, 3, 2, 5, 4, 7, 8]

ポイントは、str(listA)でリストを一度文字列に変換し、正規表現 r'[\[\]\(\)]' によって「[ ] ( ) , および半角スペース」をすべて削除している点です。これにより文字列中に数字だけが残り、set()によって重複が排除されます。なお、setは順序を保持しないため、出力順序は実行環境によって異なる場合があります。順序が必要な場合は sorted(res) を使ってソートしてください。

方法2:itertools.chainとsetを組み合わせる

itertoolsモジュールのchain.from_iterable()を使うと、タプルのリストを平坦化して各要素を順に取り出せます。各数値を文字列に変換した上で、空のsetに1文字ずつ追加していけば、一意な数字の集合を作成できます。

サンプルコード

from itertools import chain

listA = [(21, 3), (13, 4), (15, 7), (8, 11)]
# 元のリストを表示
print("Given list : \n", listA)

# リストを平坦化し、各要素を文字列に変換
temp = map(lambda x: str(x), chain.from_iterable(listA))

# 空のsetを用意して数字を1つずつ追加
res = set()
for i in temp:
    for elem in i:
        res.add(elem)

# 結果を表示
print("Set of digits: \n", res)

実行結果

Given list :
[(21, 3), (13, 4), (15, 7), (8, 11)]
Set of digits:
{'1', '3', '2', '5', '4', '7', '8'}

この方法では、結果が文字型(str)のsetになる点に注意してください。必要に応じて int(elem) のように整数へ変換するとよいでしょう。また、こちらもsetであるため、要素の並び順は保証されません。

まとめ

どちらの方法も「リスト → 文字列化 → 一意な数字の抽出」という流れが基本です。簡潔さを重視するならre.sub+set、イテレータを活用した処理にしたいならitertools.chain+setがおすすめです。データの規模や用途に応じて、最適な方法を選びましょう。

  1. Pythonで文字のリストを文字列に変換する方法を解説

    Pythonでは、リスト内の個々の要素をひとつの文字列にまとめたい場面がよくあります。たとえば、データを保存したり送信したりする際に必要となるシリアライズ(直列化)の処理では、このような変換が非常に役立ちます。具体的には、次のような変換を指します。[h, e, l, l, o, , w, o, r, l, d] → hello worldjoinメソッドを使った変換Pythonには、このような変換を実現するためのjoin()メソッドが標準で用意されています。joinメソッドは、区切り文字(デリミタ)として使う文字列に対して呼び出し、引数に渡したリストの各要素を連結します。今回は各文字をつなげ

  2. Pythonでリストをタプルに変換する方法

    Pythonでは、リストをタプルに変換するのは非常に簡単です。組み込み関数である tuple() 関数にリストを引数として渡すだけで、変換することができます。サンプルコードmy_list = [1, 2, 3] my_tuple = tuple(my_list) print(my_tuple)出力結果上記のコードを実行すると、以下のような出力が得られます。(1, 2, 3)解説tuple() 関数は、リストだけでなく文字列や辞書などのイテラブル(反復可能なオブジェクト)もタプルに変換できます。タプルはリストと異なりイミュータブル(変更不可)であるため、データを誤って書き換えたくない場合や、辞書