在python 3中,从包含异构数据类型项的列表中仅获取正数 我有一个包含在字符串中的异构数据类型的项目列表。
由此,我想获得一个只有正数的新列表:在python 3中,从包含异构数据类型项的列表中仅获取正数 我有一个包含在字符串中的异构数据类型的项目列表。,python,list,Python,List,由此,我想获得一个只有正数的新列表:new\u lst=[1155] 我试图避免负数,如下所示。但是,我无法避免字符串和空字符串: lst1=int(lst) for i in lst1: if i<0: print i else: continue Traceback (most recent call last): File "C:/Users/Dev/Documents/Assignment-2/test-2.py", line 22, in &
new\u lst=[1155]
我试图避免负数,如下所示。但是,我无法避免字符串和空字符串:
lst1=int(lst)
for i in lst1:
if i<0:
print i
else:
continue
Traceback (most recent call last):
File "C:/Users/Dev/Documents/Assignment-2/test-2.py", line 22, in <module>
c3=int(row[3])
ValueError: invalid literal for int() with base 10: 'err'
>>>
lst1=int(lst)
对于lst1中的i:
如果我>>
lst1=int(lst)
是引发异常的代码。这实际上是试图将列表
转换为int
(这是您无法做到的)
您要做的是遍历lst
,对于每个元素,确定元素是否可以转换为int
,然后检查元素(作为int
)是否为正
你可以这样做:
lst = ['1','err','-1',' ','155']
new_lst = []
for i in lst:
try:
int_i = int(i) # try to cast i to an int
if int_i > 0:
new_lst.append(int_i)
except ValueError: # ValueError is raised, i cannot be cast into an int
pass # continue to the next element
编辑:添加了
ValueError
完整性,请参见@BigZ的答案。这里有一个单行程序,用于测试元素是否实际上是一个数字。如果未完成此检查,int(x)
将不起作用,并引发异常
lst=['1','err','-1',' ','155']
newlst = []
for i in lst:
try:
if int(i) >= 0:
newlst.append(int(i))
except ValueError:
pass
lst=['1','err','-1',' ','155']
lst1 = filter(None,[(lambda x: x if x.isdigit() and int(x) > 0 else None) (x) for x in lst])
如果您只有整数,并且只想保留正数,则只要考虑
str.isdigit
就足够了,因为您不关心“-1”
在str.isdigit
上是否失败:
lst[:] = (ele for ele in lst if ele.isdigit() and int(ele) > 0)
如果您可能有浮动,那么使用
int
和try/except的所有答案也将失败,如果您想涵盖“1.0”等内容。。您需要在try中强制转换为float。您可以利用pd.\u numeric
和参数强制
通过将非数字更改为Nan,从本质上删除它们,然后只提取正数
[x for x in pd.to_numeric(lst, errors='coerce') if x > 0]
这听起来像是家庭作业,所以我不会给你工作代码,我会给你一个如何解决它的想法。首先,迭代列表,对于列表中的每个项目,
尝试将其转换为int
。如果转换成功,请检查数字是否大于0。如果是这样,那么您可以将其添加到正数列表中。
[x for x in pd.to_numeric(lst, errors='coerce') if x > 0]