如何将输入列表转换为整数列表?

时间:2018-03-07 07:33:00

标签: python-3.x list delimiter

我正在解决问题,用户将以此模式提供输入 -

[5,10,15,20]

由于这是用户给出的输入,因此它是一个字符串。我想将这些数字转换为整数并将它们存储在列表中。

我尝试使用以下代码 -

import re
mystr=input()
mylist=list(re.split('[ |, |] ',mystr))
print(mylist)

输出结果为:

['[5,10,15,20]']

为什么re.split()没有正确分割输入? 我希望输出是用户输入的整数列表。

如果问题重复,我道歉。我是python的新手以及stackoverflow。

非常感谢。

2 个答案:

答案 0 :(得分:5)

将字符串转换为其等效的python:

>>> import ast
>>> mystr = '[5,10,15,20]'
>>> x = ast.literal_eval(mystr)
>>> x
[5, 10, 15, 20]

evalast.literal_eval更为通用。但是,ast.literal_eval使用起来更安全。

文档

来自python online docs

  

ast.literal_eval(node_or_string)
安全评估表达式节点或   包含Python文字或容器显示的字符串。字符串   或者提供的节点可能只包含以下Python文字   结构:字符串,字节,数字,元组,列表,dicts,集,   布尔,没有。

     

这可以用于安全地评估包含Python的字符串   来自不受信任来源的值,无需解析值   自己。它无法评估任意复杂性   表达式,例如涉及运算符或索引。

     

在版本3.2中更改:现在允许字节和设置文字。

使用re

让我们稍微修改正则表达式:

>>> mystr = '[5,10,15,20]'
>>> list(re.split('[ |, |]+', mystr))
['[5', '10', '15', '20]']

摆脱前导和尾随方括号:

>>> list(re.split('[ |, |]+', mystr.strip('[]')))
['5', '10', '15', '20']

上面给出了一个字符串列表。要将它们转换为整数:

>>> [int(x) for x in re.split('[ |, |]+', mystr.strip('[]'))]
[5, 10, 15, 20]

答案 1 :(得分:2)

如果你足够信任用户(只有他/她是你自己), 你可以使用,但是可以使用:

mylist = eval("[5,10,15,20]")

更安全的解决方案(无错误处理):

mystr = mystr.strip('[')
mystr = mystr.strip(']')
mylist = [int(i) for i in mystr.split(',')]