我有一个文本文件,我把它读到一个列表中。此列表包含整数和字符串。
例如,我的列表可能如下所示:
["name", "test", "1", "3", "-3", "name" ...]现在,我想使用.isdigit()方法或isinstance()函数将所有数字转换为整数。例如:
for i in range len(mylist):
if mylist[i].isdigit():
mylist[i] = int(mylist[i])问题是,例如,"-3".isdigit()会返回False。有什么建议可以简单地解决这个问题并将负数字字符串转换为负整数吗?
发布于 2013-03-30 23:29:02
该方法仅测试数字,并且-不是数字。如果您想要检测整数,则需要使用int()进行测试并捕获ValueError异常:
for i, value in enumerate(mylist):
try:
mylist[i] = int(value)
except ValueError:
pass # not an integer换句话说,不需要显式测试;只需转换并捕获异常即可。请求宽恕而不是请求许可。
发布于 2013-03-30 23:29:39
尝试一下,并在失败时捕获异常:
try:
return int(obj)
except ValueError:
...Python认为请求宽恕比请求许可更容易。三思而后行通常更慢、更难读,而且通常会引入竞争条件(不是在这种情况下,而是在一般情况下)。
而且,像这样就地修改列表也不是一个好主意,因为在Python中通过索引访问是很慢的。相反,可以考虑使用如下所示的list comprehension:
def intify(obj):
try:
return int(obj)
except ValueError:
return obj
mylist_with_ints = [intify(obj) for obj in mylist]这将创建一个具有修改后的值的新列表,并且更具可读性和效率。
需要注意的是,由于我们只是将一个函数应用于列表中的每一项,因此map()在这里也可以很好地工作:
mylist_with_ints = map(intify, mylist)请注意,如果您在3.x中需要一个列表而不是一个迭代器,那么您将需要将映射调用包装在list()中。
发布于 2013-03-30 23:29:57
转换为整数的方法是尝试转换,并为转换失败做好准备:
for i in range(len(mylist)):
try:
mylist[i] = int(mylist[i])
except ValueError:
passhttps://stackoverflow.com/questions/15720176
复制相似问题