💨

【Python入門】文字列配列の検証

に公開

はじめに

Pythonを使っていて、配列がすべて文字列で構成されていることを確認しようとしたのですが、方法がわからず調べた結果を記事としてまとめていきます。

文字列配列の検証

配列自体をチェックするだけでは不十分です。
理由は、Pythonのリストは柔軟で、さまざまな型のデータが混在する可能性があるためです。
配列の各要素を一つずつ調べて、それぞれの型を確認する必要があります。

そこで使用するのが、isinstance() 関数と all() 関数を組み合わせです。

isinstance() は、オブジェクトが特定の型であるかどうかをチェックするための組み込み関数です。
この関数を all() と組み合わせることで、配列のすべての要素を一度にチェックできます。

def is_string_array(arr: list) -> bool:
    # まず、入力がリストであるかを確認
    if not isinstance(arr, list):
        return False
    
    # 次に、リスト内のすべての要素が文字列であるかを確認
    return all(isinstance(item, str) for item in arr)

コードの仕組み

isinstance(arr, list)

この最初のチェックは、入力された arr が実際にPythonの list であることを確認します。
これにより、文字列や整数など、他の型のデータが渡された場合にエラーを防ぎます。

all(...)

all() 関数は、イテラブル(反復可能なオブジェクト)内のすべての要素が真値(True)である場合に True を返します。
一つでも False の要素があれば、すぐに False を返して処理を終了します。

(isinstance(item, str) for item in arr)

これはジェネレータ式です。メモリに新しいリストを作成することなく、arr内の各要素に対してTrueまたはFalseの真偽値のシーケンスを効率的に生成します。
各itemに対して、isinstance(item, str)がチェックされます。

他の書き方

他の書き方
def is_string_array_beginner(arr: list) -> bool:
    # リスト内のすべての要素が文字列であるかを確認
    # 1. まず、入力がリストであるかを確認
    if not isinstance(arr, list):
        return False
        
    # 2. リストを一つずつチェックするループ
    for item in arr:
        # 3. 各要素が文字列ではない場合にFalseを返す
        if not isinstance(item, str):
            return False

    # 4. ループを最後まで回ったら、すべて文字列なのでTrueを返す
    return True

参考URL

https://www.javadrive.jp/python/function/index8.html

https://docs.python.org/ja/3.13/library/functions.html#isinstance

Discussion