【Python入門】リストが別のリストに含まれているか確認する2つの方法
Pythonでは、2つの異なるリストが与えられたときに、「一方のリストがもう一方のリストの一部(部分リスト)として含まれているか」を確認したい場面があります。本記事では、代表的な2つのアプローチをサンプルコード付きでわかりやすく解説します。
方法1:map関数とjoin関数を使う方法
まずmap()関数でリストの各要素を文字列化し、続いてjoin()関数でカンマ区切りの文字列を作成します。そのうえで、in演算子を使って、リストAの文字列がリストBの文字列の中に含まれているかどうかを判定します。
サンプルコード
listA = ['x', 'y', 't']
listB = ['t', 'z', 'a', 'x', 'y', 't']
print("Given listA elements: ")
print(', '.join(map(str, listA)))
print("Given listB elements:")
print(', '.join(map(str, listB)))
res = ', '.join(map(str, listA)) in ', '.join(map(str, listB))
if res:
print("List A is part of list B")
else:
print("List A is not a part of list B")
実行結果
上記のコードを実行すると、以下のような結果が出力されます。
Given listA elements: x, y, t Given listB elements: t, z, a, x, y, t List A is part of list B
方法2:range関数とlen関数を使う方法
len()関数でリストAの長さを取得し、range()関数を使ってリストBの先頭位置をずらしながら、同じ長さの部分リスト(スライス)を順番に取り出します。そしてany()関数で、リストAと完全に一致する部分リストが1つでも存在するかどうかを判定します。この方法は要素同士を直接比較するため、より厳密なチェックが可能です。
サンプルコード
listA = ['x', 'y', 't']
listB = ['t', 'z', 'a', 'x', 'y', 't']
print("Given listA elements:\n", listA)
print("Given listB elements:\n", listB)
n = len(listA)
res = any(listA == listB[i:i + n] for i in range(len(listB) - n + 1))
if res:
print("List A is part of list B")
else:
print("List A is not a part of list B")
実行結果
上記のコードを実行すると、以下のような結果が出力されます。
Given listA elements: ['x', 'y', 't'] Given listB elements: ['t', 'z', 'a', 'x', 'y', 't'] List A is part of list B
使い分けのポイントと注意点
- map + join の方法: コードがシンプルで読みやすい反面、文字列として連結して比較するため、要素内にカンマや空白が含まれる場合には意図しない誤検出が起こる可能性があります。
- range + len の方法: スライスで部分リストを直接比較するため、正確な判定ができます。ただし、リストが長い場合は計算量が増える点に注意しましょう。
用途に応じて、簡易チェックなら方法1、厳密な一致判定が必要なら方法2を選ぶのがおすすめです。
-
Pythonでリストに連続した数値が含まれているか確認する方法
データ分析の目的によっては、Pythonのデータコンテナ内に連続した数値が含まれているかどうかを確認する必要がある場合があります。本記事では、リストの要素の中に連続する数値が存在するかどうかを判定する2つの方法を、具体的なサンプルコードとともに解説します。rangeとsortedを組み合わせる方法sorted関数は、リストの要素を昇順に並べ替えます。その後、min関数とmax関数を使ってリスト内の最小値と最大値を取得し、range関数に渡して連続した数値列を生成します。並べ替えたリストと生成した数値列を比較し、両者が一致すれば、元のリストには連続した数値が含まれていることになります。サンプルコ
-
Pythonで部分文字列が文字列に含まれているか確認する方法(in演算子とfindメソッド)
Pythonでは、ある文字列が別の文字列の部分文字列(サブストリング)として含まれているかどうかを簡単に確認できます。最も基本的な方法は、in 演算子を使うことです。in 演算子を使った判定方法in 演算子は、左辺の文字列が右辺の文字列に含まれている場合に True を、含まれていない場合に False を返します。以下はその使用例です。print(ello in hello world)実行結果:Trueこのように、ello は hello world の中に含まれているため、True が出力されます。find() メソッドで位置(インデックス)を取得する部分文字列が含まれているかどうかに加