0

文字列を含むリストがあります。これらの文字列は、単語または整数値のいずれかです。たとえば、このリストは次のようになります。

['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']

ここで、型 (整数または文字列) に基づいて、それらを異なる方法で扱いたいと思います。ただし、お気づきのとおり、使用できませんisinstace()。関数を使用type()して整数値を変換し、int()すべてを try-except メソッドに入れて、単語の変換でエラーが発生しないようにすることもできます。しかし、これは私にはハックに思えます。この場合の適切な処理方法を知っていますか? 前もって感謝します!

4

4 に答える 4

3

「許可を求めないで、許しを求める」というPythonの方法:

lst = ['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']

for item in lst:
    try:
        int_number = int(item)
    except ValueError:
        # handle the special case here

これは、リスト内の少数のアイテムのみが「特殊な」ケースのアイテムになると予想される場合に実行する必要があることに注意してください。それ以外の場合は、@doomsterのアドバイスとしてチェックを行ってください。

于 2013-01-13T13:23:24.697 に答える
3

私は別のアプローチを取るでしょう。可能な「特別な」単語をすべて知っている場合は、これらを確認してください。それ以外はすべて int でなければなりません:

keywords = {'Negate', 'SPECIALCASE'}
tmp = []
for i in lis:
    if i in keywords:
        tmp.append(i)
    else
        tmp.append(int(i))

もちろん、変換せずに int 以外のものを受け入れたい場合は、変換を試みて、変換されていない使用にフォールバックする方法があります。

于 2013-01-13T13:03:54.067 に答える
0

型変換を使用して、整数か文字列かを確認できます。

def is_integer(input):
  try:
    int(input)
    return True
  except:
    return False

for item in ['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']:
  if is_integer(item):
     ...
  else:
     ...
于 2013-01-13T13:31:03.527 に答える
0

参考までに、正規表現のアプローチを次に示します。これはやり過ぎかもしれません。

mylist = ['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']

import re
p = re.compile(r'-?\d+')
[p.match(e) is not None for e in mylist]
# returns [True, False, True, True, False, True]

これは、オプションで で始まり、1 つ以上の数字を含むTrue任意の文字列のリストを返します。他の文字列の場合。-False

または、リストは必要ないが、別の操作を実行したいだけの場合:

for item in mylist:
    if p.match(item):
        # it's a number
    else:
        # it's a string

上記はNone(つまり、一致なし) がFalseと評価され、その他 (正規表現一致の場合) が と評価されるため機能しTrueます。より明確にしたい場合は、 を使用できますif p.match(item) is not None:

于 2013-01-13T13:30:23.413 に答える