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 : 結果を格納するため、最初に空のリストを含むリストを用意します。 ステップ3 : リストの長さ分だけ外側の for ループを回します。 ステップ4 : 内側のループを i+1 からリストの長さまで実行し、i より右側のすべての範囲を取得します。 ステップ5 : スライス A[i:j] で部分リストを切り出します。 ステップ6 : 切り出した部分リストを結果用のリストに追加します。 ステップ7 : 最後に結果をまとめて出力します。
サンプルコード
# Python program to print all
# sublist from a given list
# function to generate all the sub lists
def displaysublist(A):
# store all the sublists
B = [[]]
# first loop
for i in range(len(A) + 1):
# second loop
for j in range(i + 1, len(A) + 1):
# slice the subarray
sub = A[i:j]
B.append(sub)
return B
# driver code
A = list()
n = int(input("Enter the size of the First List ::"))
print("Enter the Element of First List ::")
for i in range(int(n)):
k = int(input(""))
A.append(k)
print("SUBLIST IS ::>", displaysublist(A))
コードのポイント
range(len(A) + 1)により、開始位置 i を 0 からリストの長さまで動かしています。- 内側の
range(i + 1, len(A) + 1)で終了位置 j を決めることで、A[i:j]のスライスだけで連続した部分リストを簡単に取得できます。 - 初期値として空のリスト
[]を入れておくことで、空のサブリストも結果に含まれます。
出力結果
Enter the size of the First List :: 3 Enter the Element of First List :: 1 2 3 SUBLIST IS ::> [[], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]
このように、二重ループとスライスを組み合わせるだけで、リストのすべての連続するサブリストを効率よく生成できます。順列や組み合わせのように並び替えを伴うものではなく、「元のリストの連続した区切り」をすべて列挙する処理である点に注意してください。
-
指定した範囲内のすべての素数を出力するPythonプログラム
この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 ある区間が与えられたとき、その範囲内に含まれるすべての素数を求めて出力する必要があります。 ここでは、素数の基本的な定義に基づいた全探索(ブルートフォース)によるアプローチを紹介します。素数とは、「1とその数自身のみを約数として持ち、それ以外の数を約数に持たない自然数」のことです。 この定義に基づき、各数値が素数の条件を満たしているかどうかを判定し、条件が真(True)と評価されるたびに出力処理を行います。 それでは、実際の実装例を見ていきましょう。 実装例 start = 1 end = 37 for val in
-
指定された文字列のすべての順列を出力する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 +