我的原始输入格式为"(1,2,3)","(3,4,5)","(6,7,8)"
,我想将其转换为列表l = [[1,2,3],[3,4,5],[6,7,8]]
。我尝试使用正则表达式进行剥离
re.findall("(?<=\()?\d+(?=\)?)",s)
但这个正则表达式的问题在于它只删除了每一个数字并且几乎相当于
re.findall("\d+", s)
我正在寻找一段简单的代码,我不想通过浏览整个输入并检查它是否是我想要的东西而走很长的路。
也可以有人告诉我默认情况下python中的raw_input是否被视为字符串?
答案 0 :(得分:5)
你可以这样做
删除所有双引号
使用ast.literal_eval
获取元组的元组
使用list comprhension和list
函数将元组的元组转换为列表列表
data = """"(1,2,3)","(3,4,5)","(6,7,8)"""""
from ast import literal_eval
print [list(item) for item in literal_eval(data.replace('"', ""))]
# [[1, 2, 3], [3, 4, 5], [6, 7, 8]]
答案 1 :(得分:0)
尝试:
s = '"(1,2,3)","(3,4,5)","(6,7,8)"'
[map(int, i[1:-1].split(',')) for i in s[1:-1].split('","')]
答案 2 :(得分:0)
尝试以下方法:
a = '"(1,2,3)","(3,4,5)","(6,7,8)"'
new_a = [list(eval(x)) for x in eval(a)]
你也可以使用ast.literal_eval()而不是eval()来保证安全!