知らんかったです。ハマり記念
>>> lis = [str(x) for x in range(-3, 3)] >>> lis ['-3', '-2', '-1', '0', '1', '2'] >>> for l in lis: ... print(l if l.isnumeric() else 'Noooo!!!') ... Noooo!!! Noooo!!! Noooo!!! 0 1 2 >>> for l in lis: ... print(l if l.isdigit() else 'Fuck!!!!') ... Fuck!!!! Fuck!!!! Fuck!!!! 0 1 2 >>> for l in lis: ... print(l if l.isdecimal() else 'aaaaaaa!!!') ... aaaaaaa!!! aaaaaaa!!! aaaaaaa!!! 0 1 2
もちろん、lis
が文字列ではなく数値の場合はこの限りではないのですが、文字列と数値(として扱いたいやつ)が混合した入力でふつうにinput().split()
して得たようなやつだとンンンとなるので若干つらくなりました。
適当にre
なりで対応する手もあるんでしょうが、正規表現は思考コストが高い気がするので今回はわざわざ関数で判断しました(2019/01/01 正規表現版追記しました)。ラムダ式はリテラルがアレで使えなくて残念。
>>> def isnum(a): ... try: ... int(a) ... except: ... return False ... return True ... >>> for l in lis: ... print(l if isnum(l) else 'くぁwせdrftgyふじこlp;') ... -3 -2 -1 0 1 2
ほかに良い方法があったら教えてください、という話でした。
以下追記(2019/01/01)。正規表現版
import re lis = [str(x) for x in range(-3, 3)] for l in lis: print(int(l) if re.match('[+|-]?\d', l) else None)