从特殊字符列表中提取整数

时间:2018-06-27 17:54:06

标签: python python-3.x list

我在python中有以下列表

a = ['[', '1', ',', ' ', '0', ',', ' ', '0', ',', ' ', '0', ',', ' ', '0', ',', ' ', '1', ',', ' ', '0', ',', ' ', '1', ',', ' ', '1', ',', ' ', '0', ']']

我想从中提取整数,以便获得新列表  [1,0,0,0,0,1,0,1,1,0]。我正在使用python 3.x,并且已经尝试了链接How to extract numbers from a list of strings?中给出的解决方案,但不幸的是,我得到了一个空列表[]。有人可以帮我吗?

4 个答案:

答案 0 :(得分:7)

isdigit用于列表理解:

[int(i) for i in a if i.isdigit()]

# [1, 0, 0, 0, 0, 1, 0, 1, 1, 0]

答案 1 :(得分:1)

有人弄乱了这个数据,真的很糟糕。我们有以下内容:

a = ['[', '1', ',', ' ', '0', ',', ' ', '0', ',', ' ', '0', ',', ' ', '0', ',', ' ', '1', ',', ' ', '0', ',', ' ', '1', ',', ' ', '1', ',', ' ', '0', ']']

让我们尝试一下

b = ''.join(a)

现在b'[1, 0, 0, 0, 0, 1, 0, 1, 1, 0]'。这看起来像是literal_eval的任务:

import ast
ast.literal_eval(b)

等等,列表又回来了:[1, 0, 0, 0, 0, 1, 0, 1, 1, 0]

将所有内容放在一起:

import ast

a = ['[', '1', ',', ' ', '0', ',', ' ', '0', ',', ' ', '0', ',', ' ', '0', ',', ' ', '1', ',', ' ', '0', ',', ' ', '1', ',', ' ', '1', ',', ' ', '0', ']']
result = ast.literal_eval(''.join(a))

创建这种混乱数据的人都是使用强制转换来组合字符串和列表。检查一下自己:print(str(list(str([1, 0, 0, 0, 0, 1, 0, 1, 1, 0]))))

答案 2 :(得分:0)

如果列表理解如

t = [int(x) for x in a if x.isdigit()]

t = [int(g) for g in filter(lambda x: x.isdigit(),a)] 

超越了您,您可以使用更简单的方法。遍历源列表中的所有项目,尝试将其转换为整数,然后将结果添加到列表中。

如果发生错误,则它不是整数,您将忽略该元素,也不要将其添加到结果列表中:

a = ['[', '1', ',', ' ', '0', ',', ' ', '0', ',', ' ', '0', ',', ' ', '0', ',', ' ', '1', 
     ',', ' ', '0', ',', ' ', '1', ',', ' ', '1', ',', ' ', '0', ']']

rv = []

for text in a:
    try:
        rv.append(int(text))   # appennd if convertable to int,
    except: # catchall 
        pass                   # else pass

print(rv)

输出:

[1, 0, 0, 0, 0, 1, 0, 1, 1, 0]

阅读:

答案 3 :(得分:-2)

更有效的解决方案:

list(map(int, filter(str.isdigit, a)))

请阅读Python List Comprehension Vs. Map。处理非Lambda函数时,map比列表理解要快。