Python :从列表中删除不可转换为 int 的项目的干净有效的方法
Python : Clean and efficient way to remove items that are not convertable to int from list
我有一个这样的列表:
mylist = [1.0,2.0,3.0,4.0,...,u'*52', u'14*', u'16*',"", "" ,"",...]
基本上包含float
、unicodes
和blank(string?)
。 (它也可以有其他数据类型)
我的 objective 是从列表中删除任何不能转换为整数的项目。
我试过这样使用 .isdigit()
:
newlist= [i for i in mylist if i.isdigit()]
但我最终得到了 AttributeError
:
AttributeError: 'float' object has no attribute 'isdigit'
什么是干净整洁的方法(不使用太多 if/else 或 try/except 子句)来实现这一点?
我正在使用 python 2.7
您可以使用辅助函数:
def convertible(v):
try:
int(v)
return True
except (TypeError, ValueError):
return False
newlist = [i for i in mylist if convertible(i)]
试试下面的代码:
mylist = [1.0,2.0,3.0,4.0,u'*52', u'14*', u'16*']
newlst=[]
for i in mylist:
try:
newlst.append(int(i))
except ValueError:
pass
print newlst
对于您的示例列表,这可以应用,"without using too many if/else or try/except clauses"
>>>[i for i in mylist if isinstance(i, (int, float))]
[1.0, 2.0, 3.0, 4.0]
from numbers import Number
mylist = [1.0,2.0,3.0,4.0,u'*52', u'14*', u'16*',"", "" ,""]
mylist[:] = [ele for ele in mylist if isinstance(ele,Number)]
print(mylist)
为什么你得到 AttributeError: 'float' object has no attribute 'isdigit'
是因为 isdigit
是一个 str 方法,你试图在一个实际的浮点数上调用它。
mylist[:]
更改原始列表,它可能是您想要的,也可能不是您想要的,如果您想保留两者,只需使用 newlist= ...
.
我有一个这样的列表:
mylist = [1.0,2.0,3.0,4.0,...,u'*52', u'14*', u'16*',"", "" ,"",...]
基本上包含float
、unicodes
和blank(string?)
。 (它也可以有其他数据类型)
我的 objective 是从列表中删除任何不能转换为整数的项目。
我试过这样使用 .isdigit()
:
newlist= [i for i in mylist if i.isdigit()]
但我最终得到了 AttributeError
:
AttributeError: 'float' object has no attribute 'isdigit'
什么是干净整洁的方法(不使用太多 if/else 或 try/except 子句)来实现这一点?
我正在使用 python 2.7
您可以使用辅助函数:
def convertible(v):
try:
int(v)
return True
except (TypeError, ValueError):
return False
newlist = [i for i in mylist if convertible(i)]
试试下面的代码:
mylist = [1.0,2.0,3.0,4.0,u'*52', u'14*', u'16*']
newlst=[]
for i in mylist:
try:
newlst.append(int(i))
except ValueError:
pass
print newlst
对于您的示例列表,这可以应用,"without using too many if/else or try/except clauses"
>>>[i for i in mylist if isinstance(i, (int, float))]
[1.0, 2.0, 3.0, 4.0]
from numbers import Number
mylist = [1.0,2.0,3.0,4.0,u'*52', u'14*', u'16*',"", "" ,""]
mylist[:] = [ele for ele in mylist if isinstance(ele,Number)]
print(mylist)
为什么你得到 AttributeError: 'float' object has no attribute 'isdigit'
是因为 isdigit
是一个 str 方法,你试图在一个实际的浮点数上调用它。
mylist[:]
更改原始列表,它可能是您想要的,也可能不是您想要的,如果您想保留两者,只需使用 newlist= ...
.