3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個贊
它已經(jīng)存在!
>>> 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不同,則您需要單獨(dú)處理這種情況或使用諸如之類的其他方法tuple(int(x) for x in tup_string[1:-1].split(','))。

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個贊
我們也可以自己解析它。假設(shè)我們有Python返回的元組,如下所示:
((2, 'C/C++', 0, 'clang_cpp'), (3, 'Python相關(guān)', 0, 'python'))
這是我們的方法
首先,我們繼續(xù)讀取元組字符串中的字符,但存儲最后一個左分號的位置以及遇到的分號數(shù)(我們可以將其稱為左分號級,對于右分號也是如此),每當(dāng)遇到右分號時,我們以下內(nèi)容:
從最后一個分號到當(dāng)前右分號的一個子字符串。(在此子字符串中,不再有分號,我們只是將其用“,”分割成數(shù)組,假設(shè)新數(shù)組是M)
然后,將其追加M到結(jié)果數(shù)組中,該數(shù)組將存儲all M。
第三,從原始字符串中刪除我們提取的子字符串。最后,執(zhí)行與步驟1相同的操作,直到左右分號的電平變?yōu)?。
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;
}
添加回答
舉報