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

Pythonでクラスを作成してリスト内の整数からすべての部分集合(サブセット)を取得する方法

リストに含まれる整数からすべての可能な部分集合(サブセット)を取得するクラスを作成する場合、オブジェクト指向のアプローチを活用するのが効果的です。ここでは、クラスを定義し、その中に属性やメソッドを実装します。クラス内に定義された関数が特定の処理を担当し、クラスのインスタンスを生成することで、それらの機能を実際に利用できるようになります。

以下に具体的な実装例を示します。

サンプルコード

class get_subset:
   def sort_list(self, my_list):
      return self.subset_find([], sorted(my_list))
   def subset_find(self, curr, my_list):
      if my_list:
         return self.subset_find(curr, my_list[1:]) + self.subset_find(curr + [my_list[0]], my_list[1:])
      return [curr]
my_list = []
num_elem = int(input("リストの要素数を入力してください.. "))
for i in range(0,num_elem):
   elem=int(input("要素を入力してください.."))
   my_list.append(elem)
print("リストの部分集合は次のとおりです : ")
print(get_subset().sort_list(my_list))

実行結果

リストの要素数を入力してください.. 3
要素を入力してください..45
要素を入力してください..12
要素を入力してください..67
リストの部分集合は次のとおりです :
[[], [67], [45], [45, 67], [12], [12, 67], [12, 45], [12, 45, 67]]

コードの解説

  • まず「get_subset」という名前のクラスを定義します。このクラスには「sort_list」と「subset_find」という2つのメソッドが含まれています。
  • 「sort_list」メソッドは、受け取ったリストを昇順にソートしたうえで、「subset_find」メソッドに処理を委譲します。
  • 「subset_find」メソッドは再帰的に呼び出され、各要素を「含める場合」と「含めない場合」の2つの分岐で探索することで、すべての部分集合を網羅的に生成します。
  • ユーザーからの入力を受け取り、リストデータを構築した後、クラスのインスタンスを生成してメソッドを呼び出します。
  • 最終的に、生成されたすべての部分集合がコンソールに出力されます。

このように再帰を活用した設計により、要素数が増えても柔軟に対応できる汎用的な部分集合生成クラスを実現できます。空のリスト [] も有効な部分集合として結果に含まれる点にも注目してください。

  1. キーと値のリストからPython辞書(dict)を作成する方法

    キーリストと値リストから辞書を作成する Pythonでは、キーを格納したリスト(L1)と、それに対応する値を格納したリスト(L2)が別々に用意されている場合でも、いくつかの簡単な方法で1つの辞書オブジェクトにまとめることができます。 ここでは、代表的な2つの方法を紹介します。 方法1:zip()関数とdict()関数を組み合わせる 最もシンプルで一般的なのが、zip()で2つのリストをペア化し、dict()関数で辞書に変換する方法です。 >>> L1 = [a,b,c,d] >>> L2 = [1,2,3,4] >>> d = dict(

  2. Pythonで文字列やリストからタプルを作成する方法をわかりやすく解説

    tuple()関数の基本的な使い方Pythonには、さまざまなオブジェクトをタプルに変換できる組み込み関数 tuple() が用意されています。この関数を使うことで、文字列を個々の文字からなるタプルに変換したり、リストオブジェクトをそのままタプルに変換したりできます。ここでは、それぞれの具体的な使い方を見ていきましょう。1. 文字列をタプルに変換する文字列を tuple() の引数として渡すと、各文字が1つの要素となったタプルが返されます。>>> tuple(TutorialsPoint) (T, u, t, o, r, i, a, l, s, P, o, i, n, t)こ