我在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?中给出的解决方案,但不幸的是,我得到了一个空列表[]
。有人可以帮我吗?
答案 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
比列表理解要快。