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

【Python】リストから各桁が昇順になっている要素を抽出する方法

リストの中から、各桁の数字が昇順(小さい順)に並んでいる要素だけを抽出したい場合があります。そのようなときは、シンプルな反復処理とフラグ変数、そして文字列変換のための「str」メソッドを組み合わせることで実現できます。

サンプルコード

my_list = [4578, 7327, 113, 3467, 1858]

print("The list is :")
print(my_list)

my_result = []

for element in my_list:
    my_flag = True
    for index in range(len(str(element)) - 1):
        if str(element)[index + 1] <= str(element)[index]:
            my_flag = False
    if my_flag:
        my_result.append(element)

print("The result is :")
print(my_result)

出力結果

The list is :
[4578, 7327, 113, 3467, 1858]
The result is :
[4578, 3467]

処理の流れと解説

  • まず対象となるリストを定義し、コンソールに表示します。

  • 抽出結果を格納するための空のリストを用意します。

  • リストを反復処理し、各要素ごとにフラグをブール値「True」で初期化します。

  • 各要素は「str」メソッドで文字列に変換され、隣り合う桁同士が順番に比較されます。

  • 後ろの桁が前の桁以下だった場合、フラグはブール値「False」に切り替わります。

  • 最後までフラグが「True」のまま残った要素のみ、結果リストに追加されます。

  • 最終的な結果がコンソールに出力されます。

この例では「4578」(4→5→7→8)と「3467」(3→4→6→7)のように、すべての桁が厳密に増加している数値だけが抽出されています。「113」は同じ数字が連続しているため、「7327」や「1858」は途中で減少しているため除外されます。

補足:all() を使った簡潔な書き方

同じ処理は、リスト内包表記と組み込み関数「all()」を組み合わせることで、より簡潔に記述することもできます。

my_result = [element for element in my_list
             if all(str(element)[i] < str(element)[i + 1]
                    for i in range(len(str(element)) - 1))]

print(my_result)  # [4578, 3467]

こちらの方法では、すべての隣接する桁のペアが条件「前の桁 < 後ろの桁」を満たす場合にのみ「True」が返されるため、フラグ変数を明示的に管理する必要がありません。コードの可読性や保守性を重視する場合は、こちらの書き方がおすすめです。

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

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

  2. Pythonでリストから重複要素を削除する方法を徹底解説

    重複した要素を含むリストが与えられたとき、重複を取り除いた新しいリストを作成するのが本記事のテーマです。初心者の方にも理解しやすいよう、基本的なアルゴリズムの手順から実際のコードまで順を追って解説していきます。 実行例 入力::[2,3,4,3,4,6,78,90] 出力::[2,3,4,6,78,90] アルゴリズム 重複要素を削除するための基本的な手順は以下の通りです。 元となるリストを作成する。 空の新しいリストを用意する。 元のリストの各要素を先頭から順番に走査する。 その要素が新しいリストにまだ存在しないかどうかを判定する。 存在しない場合のみ、新しいリストへ要素を追加する。