我有一个包含在字符串中的具有异构数据类型的项的列表。
lst=['1','err','-1',' ','155']由此,我想得到一个只有正数的新列表:new_lst=[1,155]
我试图避免负数,如下所示。但是,我无法避免字符串和空字符串:
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'
>>> 发布于 2015-10-16 18:58:36
lst1=int(lst)是引发异常的代码。这实际上是试图将一个list转换为一个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的答案。
发布于 2015-10-16 19:01:10
lst=['1','err','-1',' ','155']
newlst = []
for i in lst:
try:
if int(i) >= 0:
newlst.append(int(i))
except ValueError:
pass发布于 2015-10-16 19:25:44
这是一个测试元素是否实际上是数字的一行程序。如果未完成此检查,则int(x)将无法工作、抛出和异常。
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])https://stackoverflow.com/questions/33177684
复制相似问题