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

Pythonのリストから欠けている要素(抜けている数値)を見つける方法

数値を含むリストがあるとき、その数値が連続しているかどうかを確認したり、リスト内の最大値を最終値として、その範囲の中で欠けている数値を特定したりすることができます。ここでは、代表的な2つのアプローチを紹介します。

range関数とmax関数を使う方法

forループと not in 演算子を組み合わせることで、指定した範囲の中に存在しない値をチェックできます。見つかった欠損値を新しいリストに追加していき、それを結果として取得します。

サンプルコード

listA = [1,5,6, 7,11,14]

# 元のリスト
print("Given list : ",listA)

# range と max を使用して欠損値を抽出
res = [ele for ele in range(max(listA) + 1) if ele not in listA]

# 結果
print("Missing elements from the list : \n" ,res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given list : [1, 5, 6, 7, 11, 14]
Missing elements from the list :
[0, 2, 3, 4, 8, 9, 10, 12, 13]

この例では、リストの最大値が14であるため、0から14までの範囲を対象にチェックを行い、リストに存在しない [0, 2, 3, 4, 8, 9, 10, 12, 13] が欠損値として検出されています。

set(集合)を使う方法

set 関数を使って、0から最大値までの範囲のすべての値を集合として保持し、そこから元のリストの集合を差し引きます。これにより、連番の中で欠けている値だけを含む結果セットが得られます。コードが簡潔になり、可読性も高くなるのが特徴です。

サンプルコード

listA = [1,5,6, 7,11,14]

# 元のリストを出力
print("Given list : ",listA)

# set の差集合を利用して欠損値を抽出
res = list(set(range(max(listA) + 1)) - set(listA))

# 結果
print("Missing elements from the list : \n" ,res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given list : [1, 5, 6, 7, 11, 14]
Missing elements from the list :
[0, 2, 3, 4, 8, 9, 10, 12, 13]

どちらの方法を選ぶべきか

リストに対する in 演算子は線形探索(O(n))であるため、リストのサイズが大きくなると最初の方法は処理が遅くなります。一方、setを使った差集合の計算は高速(平均O(1)のメンバーシップ判定)なので、大量のデータを扱う場合はset方式がおすすめです。小規模なリストであれば、どちらの方法でも十分なパフォーマンスが得られます。

  1. リスト内の要素の合計を求めるPythonプログラム

    この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()

  2. PythonでリストからN個の最大要素を取得する方法

    整数のリストが与えられたとき、その中からN個の大きな要素を取り出して新しいリストとして返すのが、ここでの課題です。本記事では、基本的なループ処理による方法から、Python標準ライブラリを活用した効率的な方法まで、サンプルコードとともに解説します。 例 入力 : [40, 5, 10, 20, 9] N = 2 出力 : [40, 20] アルゴリズム 整数のリストと、取得する要素数Nを受け取ります。 N回のループを実行します。 各ループでリスト内の最大値を探し、新しいリストに格納すると同時に元のリストから削除します。 実装コード def Nnumberele(list1, N):