Python におけるリストの包含関係のチェック

Beginner

This tutorial is from open-source community. Access the source code

はじめに

Python では、あるリストが別のリストに含まれているかどうかを確認する必要がよくあります。これは少し厄介な場合があります。特に、リスト内の要素の順序が問題にならない場合には。このチャレンジでは、要素の順序に関係なく、あるリストの要素が別のリストに含まれているかどうかをチェックする関数を作成します。

リストの包含関係

2 つのリストを引数として受け取り、リストaのすべての要素がリストbに含まれている場合(要素の順序は問わない)にTrueを返す関数is_contained_in(a, b)を作成します。そうでない場合は、関数はFalseを返します。

この問題を解くには、次のアプローチを使用できます。

  1. リストaの各一意の値をループ処理します。
  2. 各値について、それがリストaに含まれる回数がリストbに含まれる回数よりも多いかどうかを確認します。
  3. リストaに含まれる回数がリストbに含まれる回数よりも多い値がある場合、Falseを返します。
  4. リストaのすべての値がリストbに少なくともリストaに含まれる回数と同じ回数で含まれている場合、Trueを返します。
def is_contained_in(a, b):
  for v in set(a):
    if a.count(v) > b.count(v):
      return False
  return True
is_contained_in([1, 4], [2, 4, 1]) ## True

まとめ

このチャレンジでは、あるリストが別のリストに含まれているかどうかを、要素の順序に関係なく確認する方法を学びました。2 つのリストを引数として受け取り、リストaのすべての要素がリストbに含まれている場合(要素の順序は問わない)にTrueを返す関数を作成しました。