我正在解决问题,用户将以此模式提供输入 -
[5,10,15,20]
由于这是用户给出的输入,因此它是一个字符串。我想将这些数字转换为整数并将它们存储在列表中。
我尝试使用以下代码 -
import re
mystr=input()
mylist=list(re.split('[ |, |] ',mystr))
print(mylist)
输出结果为:
['[5,10,15,20]']
为什么re.split()没有正确分割输入? 我希望输出是用户输入的整数列表。
如果问题重复,我道歉。我是python的新手以及stackoverflow。
非常感谢。
答案 0 :(得分:5)
将字符串转换为其等效的python:
>>> import ast
>>> mystr = '[5,10,15,20]'
>>> x = ast.literal_eval(mystr)
>>> x
[5, 10, 15, 20]
eval
比ast.literal_eval
更为通用。但是,ast.literal_eval
使用起来更安全。
ast.literal_eval(node_or_string)
安全评估表达式节点或 包含Python文字或容器显示的字符串。字符串 或者提供的节点可能只包含以下Python文字 结构:字符串,字节,数字,元组,列表,dicts,集, 布尔,没有。这可以用于安全地评估包含Python的字符串 来自不受信任来源的值,无需解析值 自己。它无法评估任意复杂性 表达式,例如涉及运算符或索引。
在版本3.2中更改:现在允许字节和设置文字。
让我们稍微修改正则表达式:
>>> 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(',')]