3 回答
TA贡献1804条经验 获得超7个赞
它已经存在!
>>> from ast import literal_eval as make_tuple
>>> make_tuple("(1,2,3,4,5)")
(1, 2, 3, 4, 5)
但是,请注意极端情况:
>>> make_tuple("(1)")
1
>>> make_tuple("(1,)")
(1,)
如果您的输入格式与此处的Python不同,则您需要单独处理这种情况或使用诸如之类的其他方法tuple(int(x) for x in tup_string[1:-1].split(','))。
TA贡献1963条经验 获得超6个赞
我们也可以自己解析它。假设我们有Python返回的元组,如下所示:
((2, 'C/C++', 0, 'clang_cpp'), (3, 'Python相关', 0, 'python'))
这是我们的方法
首先,我们继续读取元组字符串中的字符,但存储最后一个左分号的位置以及遇到的分号数(我们可以将其称为左分号级,对于右分号也是如此),每当遇到右分号时,我们以下内容:
从最后一个分号到当前右分号的一个子字符串。(在此子字符串中,不再有分号,我们只是将其用“,”分割成数组,假设新数组是M)
然后,将其追加M到结果数组中,该数组将存储all M。
第三,从原始字符串中删除我们提取的子字符串。最后,执行与步骤1相同的操作,直到左右分号的电平变为0。
JavaScript代码如下所示:
function parseTuple(t){
var lc = "(";
var rc = ")";
var lc_level = 0;
var rc_level = 0;
var last_lc = 0;
var last_rc = 0;
var result = [];
for(i=0;i<t.length;i++){
if(t[i] == lc){
lc_level++;
last_lc = i;
}else if(t[i] == rc){
rc_level++;
last_rc = i;
}
if(rc_level == 1){
var substr = t.slice(last_lc+1,last_rc);
var data = substr.split(",");
result.push(data);
lc_level--;
rc_level--;
i = 0;
t = t.slice(0,last_lc) + t.substring(last_rc+1);
}
if(lc_level == rc_level && lc_level==0){
break;
}
}
return result;
}
添加回答
举报