将列表形式的字符串转换为整数列表

Converting a string in the form of a list to a list of integers

我有一个包含数字的列表,其类型是字符串。如何将输入转换为整数列表?

输入:

'[1, 3, 6, 8]'

期望的输出:

[1, 3, 6, 8]

您可以在此处使用 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 the method 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