首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅从python 3中包含异构数据类型项的列表中获取正数。

仅从python 3中包含异构数据类型项的列表中获取正数。
EN

Stack Overflow用户
提问于 2015-10-16 18:53:01
回答 5查看 2.1K关注 0票数 5

我有一个包含在字符串中的具有异构数据类型的项的列表。

代码语言:javascript
复制
lst=['1','err','-1',' ','155']

由此,我想得到一个只有正数的新列表:new_lst=[1,155]

我试图避免负数,如下所示。但是,我无法避免字符串和空字符串:

代码语言:javascript
复制
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'
>>> 
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-10-16 18:58:36

lst1=int(lst)是引发异常的代码。这实际上是试图将一个list转换为一个int (这是您无法做到的)。

您要做的是遍历lst,并对每个元素确定是否可以将元素转换为int,然后检查元素(作为int)是否为正。

你可以这样做:

代码语言:javascript
复制
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的答案。

票数 2
EN

Stack Overflow用户

发布于 2015-10-16 19:01:10

代码语言:javascript
复制
lst=['1','err','-1',' ','155']
newlst = []
for i in lst:
    try:
        if int(i) >= 0:
            newlst.append(int(i))
    except ValueError:
        pass
票数 3
EN

Stack Overflow用户

发布于 2015-10-16 19:25:44

这是一个测试元素是否实际上是数字的一行程序。如果未完成此检查,则int(x)将无法工作、抛出和异常。

代码语言:javascript
复制
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])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33177684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档