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



我在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,我已经尝试了链接中给出的解决方案 如何从字符串列表中提取数字?但不幸的是,我得到了一个空列表[].有人可以帮助我吗?

isdigit与列表理解一起使用:

[int(i) for i in a if i.isdigit()]
# [1, 0, 0, 0, 0, 1, 0, 1, 1, 0]

有人把这些数据搞砸了。我们有以下几点:

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]))))

如果列出

类似
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]

阅读:

  • 错误处理
  • filter(函数,可迭代( - 如果你想查找它,只是为了完整性。

更有效的解决方案:

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

请阅读 Python 列表理解与映射。 在处理非 lambda 函数时,map比列表理解更快。

最新更新