Make組ブログ

Python、Webサービスや製品開発、ライブラリー開発についてhirokikyが書きます

文字列が回文かどうかを判定する関数を書いた

Pythonの組み込み関数のzipに感動したのと、reversedと上手く組み合わせれたのが嬉しくて更新。

def ispalindrome(s):
    h = len(s) / 2
    for a, b in zip(s[:h], reversed(s[h+1:])):
        if a != b: return 0
    return 1

文字列が回文だと1、そうでないと0を返します。

参考
zip()関数 - バリケンのPython日記 - pythonグループ

追記

id:muscovyduck さんにより良い解法をコメントいただいたので追記します。

def ispalindrome(str): return 1 if str == str[::-1] else 0

見た目にも分かりやすいですし、動作時間もこちらのほうが早いです。
21文字の文字列で100万回実行したときの時間を計測したところ、元の関数が4.68秒で新しい関数が0.58秒でした。
今回の文字列操作(str[::-1])も面白いですが、他にもstr[::2]やstr[0:5:2]などあって驚きです。

参考
文字列を逆順にする - ひきメモ