Pythonで整数配列の重複を除去し、個別の要素だけを出力する方法
整数型の配列が与えられ、その中には重複した要素が含まれている場合があります。この記事では、重複を取り除いて個別(ユニーク)な値だけを出力するPythonプログラムを解説します。
実行例
入力:A = [1, 2, 3, 4, 2, 3, 5, 6] 出力:[1, 2, 3, 4, 5, 6]
アルゴリズム
このプログラムは次の手順で動作します。
- 配列の要素を入力として受け取ります。
- 各要素を先頭から順番に1つずつ取り出します。
- 取り出した要素が、それ以前にすでに出力されたものかどうかを確認します。
- 初期値0のフラグ変数を用意し、すでに表示済みなら1、未表示なら0のままにします。
- フラグが0のままだった要素(=初めて登場した要素)のみを出力します。
サンプルコード
# Pythonプログラム:指定された配列内の
# すべての個別の要素を出力する
def distinctelement(A, n1):
print("Distinct Elements are ::>")
for i in range(0, n1):
c = 0
for j in range(0, i):
if (A[i] == A[j]):
c = 1
break
if (c == 0):
print(A[i])
# ドライバーコード
A = list()
n1 = int(input("Enter the size of the List ::"))
print("Enter the Element of List ::")
for i in range(int(n1)):
k = int(input(""))
A.append(k)
distinctelement(A, n1)
コードのポイント
関数 distinctelement() では、二重ループを使って現在注目している要素 A[i] と、それより前のすべての要素 A[j] を比較しています。同じ値が見つかればフラグ c を1にして内側のループを抜けます。最後まで c == 0 のままであれば、その要素は初めて現れたものなので出力対象となります。
実行結果
Enter the size of the List ::4 Enter the Element of List :: 1 2 2 4 Distinct Elements are ::> 1 2 4
補足:set()を使ったよりシンプルな方法
実際の開発では、組み込みの set() や dict.fromkeys() を活用することで、より短く記述できます。
A = [1, 2, 3, 4, 2, 3, 5, 6] # 重複を除去(順序は保証されない) print(set(A)) # 元の順序を保ったまま重複を除去 print(list(dict.fromkeys(A))) # [1, 2, 3, 4, 5, 6]
計算量の観点では、二重ループによる手法はO(n²)、set() を使う方法は平均O(n)となるため、扱うデータ量が多い場合は後者のほうが効率的です。アルゴリズムの仕組みを理解する目的では前者、実用性を重視する場合は後者を選ぶとよいでしょう。
-
指定された文字列のすべての順列を出力するPythonプログラム
本記事では、以下の問題に対する解決策について詳しく学んでいきます。 問題文 1つの文字列が与えられたとき、その文字列から作成できるすべての順列(並べ替えの組み合わせ)を表示する必要があります。 それでは、以下の実装例で具体的な解決策を見ていきましょう。 実装例 # リストを文字列に変換 def toString(List): return .join(List) # 順列の生成 def permute(a, l, r): if l == r: print(toString(a)) else: for i in range(l, r +
-
Pythonでリストのすべてのサブリストを生成して出力する方法
リストが与えられたとき、そのリストに含まれるすべてのサブリスト(部分リスト)を生成して出力するプログラムを紹介します。要素数 n のリストの場合、空のリストを含めるとサブリストの総数は n×(n+1)/2+1 個になります。 実行例 入力 : list = [1, 2, 3] 出力 : [], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] アルゴリズム 考え方はシンプルです。開始位置 i と終了位置 j の組み合わせをすべて試し、スライスで部分リストを取り出します。 ステップ1 : 対象となるリストを用意します。 ステップ2 : 結果を格納するため、最