我有一个包含字符串的列表。这些字符串是单词或整数值。例如,此列表可能如下所示:
['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']
现在,基于它们的类型(整数或字符串),我想以不同的方式对待它们。但是,正如您所注意到我无法使用isinstace()
。我仍然可以使用type()
并尝试使用int()
函数转换整数值,并将整个事物放在try-except方法中,以避免引发单词转换的错误。但这对我来说似乎很骇人听闻。你知道处理这种情况的正确方法吗?提前谢谢!
答案 0 :(得分:3)
我采取了不同的方法。如果你知道所有可能的"特殊"单词,检查这些。其他一切都必须是int:
keywords = {'Negate', 'SPECIALCASE'}
tmp = []
for i in lis:
if i in keywords:
tmp.append(i)
else
tmp.append(int(i))
当然,如果你想接受除了没有转换的整数之外的任何东西,那么试图转换并回归到未转换的使用是可行的。
答案 1 :(得分:3)
“不要求许可,请求原谅”的pythonic方式:
lst = ['0', 'Negate', '-3', '2', 'SPECIALCASE', '3']
for item in lst:
try:
int_number = int(item)
except ValueError:
# handle the special case here
请注意,如果您希望列表中只有少数项目成为“特殊”案例项,则应该这样做。否则将检查作为@doomster建议。
答案 2 :(得分: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]
对于任何以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:
。
答案 3 :(得分: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:
...