繁体   English   中英

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*',"", "" ,"",...]

它基本上包含floatunicodesblank(string?) (它也可以具有其他数据类型)

我的目标是从列表中删除所有不能转换为整数的项目。

我试过像这样使用.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)]
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方法,因此您试图在实际的float上调用它。

mylist[:]更改原始列表(可能想要也可能不是您想要的),如果要同时保留两者,请使用newlist= ...

对于您的示例列表,这可以适用,“无需使用过多的if / else或try / except子句”

>>>[i for i in mylist if isinstance(i, (int, float))]
[1.0, 2.0, 3.0, 4.0]

尝试以下代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM