文字列の比較・判定(完全一致、任意の文字を含むか、その文字列が数字に変換できるかを判定)

文字列の比較・判定

完全に一致するかの判定

文字列が完全に一致しているか判定したいときは、演算子 == または != を使用する。

演算子 完全一致 不一致
== True False
!= False True

サンプルコード( == の場合)

def compare_equal(value_str_1, value_str_2):
    result = value_str_1 == value_str_2
    print("value_1:", value_str_1)
    print("value_2:", value_str_2)
    print("compare result:", result)

def check_compare_equal():
    value_str_1 = "apple"
    value_str_2 = "apple"
    compare_equal(value_str_1, value_str_2)
    print("")
    value_str_1 = "apple"
    value_str_2 = "orange"
    compare_equal(value_str_1, value_str_2)

if __name__ == "__main__":
    check_compare_equal()

実行結果

value_1: apple
value_2: apple
compare result: True

value_1: apple
value_2: orange
compare result: False

任意の文字を含むかの判定(部分一致)

ある文字列に、特定の文字が含まれているかを調べたいことは多い。
そんなときは 演算子 in または not in を使用する。

演算子 含まれている 含まれていない
in True False
not in False True

サンプルコード
特定の文字 x (value_str_1) が、任意の文字列 y (value_str_2) に含まれているか調べる場合:

def partial_match(value_str_1, value_str_2):
    result = value_str_1 in value_str_2
    print("value_1:", value_str_1)
    print("value_2:", value_str_2)
    print("compare result:", result)

def check_partial_match():
    value_str_1 = "p"
    value_str_2 = "apple"
    partial_match(value_str_1, value_str_2)
    print("")
    value_str_1 = "f"
    value_str_2 = "apple"
    partial_match(value_str_1, value_str_2)

if __name__ == "__main__":
    check_partial_match()

実行結果

value_1: p
value_2: apple
compare result: True

value_1: f
value_2: apple
compare result: False

その文字列が数字に変換できるかを判定

中身は数字なのに、データとしては文字列型だというケースは意外と多い。
例えば、csvモジュールでCSVファイルを読み込んだ場合、各要素の中身は、数字であっても文字列として展開される。
これを計算に用いる場合、各要素はint型かfloat型に変換して扱う必要がある。
型の変換は標準関数のint()float()で行う事ができるのだが、この時、何かの間違いでその要素に文字列が含まれているとエラーとなってしまう。
よって、数字だけでなく文字列も含まれる・混在する可能性がある場合は、その文字列が数字に変換可能であるかを確認しておいたほうがよい。

def is_number(input_string):
    try:
        float(input_string)
    except ValueError:
        return False
    else:
        return True

def change_type(input_value):
    if is_number(input_value) is not True:
        return input_value
    else:
        if "." in input_value:
            return float(input_value)
        else:
            return int(input_value)

簡単な関数の動作説明

is_number(input_string)は、input_stringがfloat型に変換できる場合はTrue、できない場合はFalseを返す関数である。
つまり、input_stringが数字か文字列かを判定している。

change_type(input_value)は、input_valueが文字列であればそのまま値を返すが、数字であった場合は、さらにそこから小数か整数かを判定して変換を行う。
(小数点があれば、その数値は小数である。つまり.を探せばよい)

動作確認結果(使用例)は input関数 を参照。