1

Python バージョン 2.7.2 を使用しています。

リストの最後の 3 つの要素が整数かどうかを確認するタスクがありますか? 例えば:

mylist = [String, Large_string_containing_integers_inside_it, 80, 40, 50]

上記のリストでは、最後の 3 つの要素が整数かどうかを確認したいと思います。これどうやってするの?

私がテストしているコードは次のとおりです。

#!/usr/bin/python

line = ['MKS_TEST', 'Build', 'stability:', '1', 'out', 'of', 'the', 'last', '2', 'builds', 'failed.', '80', '40', '50']

if all(isinstance(i, int) for i in line[-3:]):
    job_name = line[0]
    warn = line[-3]
    crit = line[-2]
    score = line[-1]
    if score < crit:
        print ("CRITICAL - Health Score is %d" % score)
    elif (score >= crit) and (score <= warn):
        print ("WARNING - Health Score is %d" % score)
    else:
        print ("OK - Health Score is %d" % score)
4

1 に答える 1

7

リストのスライスとともに、組み込み関数isinstanceと関数を使用します。all

if all(isinstance(i, int) for i in mylist[-3:]):
    # do something
else:
    # do something else
  • all指定された iterable のすべての要素が に評価されるかどうかを調べますTrue
  • isinstance指定されたオブジェクトが2番目のパラメータのインスタンスかどうか調べます
  • mylist[-3:]の最後の 3 つの要素を返しますmylist

また、Python 2 を使用していて、リストに非常に大きな数がある場合は、long(long integer) タイプも確認してください。

if all(isinstance(i, (int, long)) for i in mylist[-3:]):
    pass

これにより、数値のような数値10**100が条件を破るのを防ぎます。

ただし、最後の 3 つの要素が文字列の場合は、2 つのオプションがあります。

どの数値も極端に大きくないことがわかっている場合は、isdigitstring メソッドを使用できます。

if all(i.isdigit() for i in mylist[-3:]):
    pass

ただし、それらが非常に大きくなる可能性がある場合 ( 前後またはそれ以上2**31)、try/exceptブロックと組み込みmap関数を使用します。

try:
    mylist[-3:] = map(int, mylist[-3:])
    # do stuff
except ValueError:
    pass
  • try実行するコードのブロックを定義します
  • except Exception指定された例外をキャッチし、エラーを発生させずに処理します (そうするように指示されない限り)
  • mapiterable の各要素に関数を適用し、結果を返します。
于 2013-01-29T09:13:50.410 に答える