【发布时间】:2021-10-29 04:09:24
【问题描述】:
我有一个列表,其中包含类型为字符串的数字。如何将输入转换为整数列表?
输入:
'[1, 3, 6, 8]'
想要的输出:
[1, 3, 6, 8]
【问题讨论】:
标签: python string list integer
我有一个列表,其中包含类型为字符串的数字。如何将输入转换为整数列表?
输入:
'[1, 3, 6, 8]'
想要的输出:
[1, 3, 6, 8]
【问题讨论】:
标签: python string list integer
您可以在这里使用eval(),并直接评估您的字符串输入:
inp = '[1, 3, 6, 8]'
output = eval(inp)
print(output) # [1, 3, 6, 8]
另一种方法,使用re.findall:
output = [int(x) for x in re.findall(r'\d+', x)]
print(output) # [1, 3, 6, 8]
【讨论】:
使用正则表达式
ip ='[1, 3, 6, 8]'
import re
opt = [int(a) for a in re.findall("\d+",ip)]
print(opt)
【讨论】:
import ast
my_list = ast.literal_eval('[1, 3, 6, 8]')
另一种选择是内置函数eval(),但ast.literal_eval() 更安全。你可以阅读更多here。
【讨论】:
使用正则表达式re.findall可以实现如下:
import re
test_string = '[1, 3, 6, 8]'
res = re.findall(r'\d+', test_string)
# Map every entry to int
res = list(map(int, res))
print (res)
【讨论】:
如果您想要一种安全的方式而不导入任何库:
s = '[1, 3, 6, 8]'
print(list(map(int, ''.join(i if i.isdigit() else ' ' for i in s).split())))
输出:
[1, 3, 6, 8]
解释:
让我们看看这条线:
list(map(int, ''.join(i if i.isdigit() else ' ' for i in s).split()))
在外部,我们只是将字符串列表映射到整数,所以让我们先摆脱这部分:
''.join(i if i.isdigit() else ' ' for i in s).split()
现在我们可以看到我们正在用空格替换s字符串中不是数字的每个字符,然后我们用空格分割字符串,导致
['1', '3', '6', '8']
然后可以将其映射到整数列表。
【讨论】:
我建议使用来自JSON standard library的方法json.loads:
import json
string = '[1, 3, 6, 8]'
res = json.loads(string)
print(res)
#=> [1, 3, 6, 8]
并得到所需的整数列表:
all([ isinstance(e, int) for e in res ])
#=> True
【讨论】: