79
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Nói rằng tôi có một chuỗi có cùng một dạng một tuple, ví dụ, "(1,2,3,4,5)". Cách dễ nhất để chuyển đổi nó thành một tuple thực tế là gì? Một ví dụ về những gì tôi muốn làm là:
tup_string = "(1,2,3,4,5)" tup = make_tuple(tup_string)Chỉ cần chạy >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 0 trên chuỗi làm cho toàn bộ một thứ lớn, trong khi những gì tôi muốn làm là hiểu chuỗi là một tuple. Tôi biết tôi có thể sử dụng một regex cho việc này, nhưng tôi đã hy vọng có một cách ít tốn kém hơn. Ý tưởng?
Niklas B.
90,6K17 Huy hiệu vàng191 Huy hiệu bạc2222 Huy hiệu đồng17 gold badges191 silver badges222 bronze badges
hỏi ngày 18 tháng 3 năm 2012 lúc 23:03Mar 18, 2012 at 23:03
1
Nó đã tồn tại!
>>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5)Tuy nhiên, hãy chú ý đến trường hợp góc:
>>> make_tuple("(1)") 1 >>> make_tuple("(1,)") (1,)Nếu định dạng đầu vào của bạn hoạt động khác với Python ở đây, bạn cần xử lý riêng trường hợp đó hoặc sử dụng một phương pháp khác như >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 1.
Đã trả lời ngày 18 tháng 3 năm 2012 lúc 23:05Mar 18, 2012 at 23:05
Niklas B.Niklas B.Niklas B.
90,6K17 Huy hiệu vàng191 Huy hiệu bạc2222 Huy hiệu đồng17 gold badges191 silver badges222 bronze badges
5
hỏi ngày 18 tháng 3 năm 2012 lúc 23:03
Nó đã tồn tại!have more control on what gets converted you can also disassemble the string, convert the values and recreate the tuple.
Tuy nhiên, hãy chú ý đến trường hợp góc:
eg = '(102,117,108)' eg_tuple = map(int, eg.replace('(','').replace(')','').split(',')))Nếu định dạng đầu vào của bạn hoạt động khác với Python ở đây, bạn cần xử lý riêng trường hợp đó hoặc sử dụng một phương pháp khác như >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 1.
Đã trả lời ngày 18 tháng 3 năm 2012 lúc 23:05
import re eg = '(102,117,108)' et_tuple = tuple(map(int, re.findall(r'[0-9]+', eg)))Niklas B.Niklas B.Dec 13, 2017 at 23:34
Tôi sẽ khuyên bạn nên sử dụng >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 2.jojo
Nếu bạn không thoải mái với >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 2 hoặc muốn có nhiều quyền kiểm soát hơn về những gì được chuyển đổi, bạn cũng có thể tháo rời chuỗi, chuyển đổi các giá trị và tạo lại tuple.2 gold badges48 silver badges69 bronze badges
1
Nghe có vẻ phức tạp hơn, thực sự, nó là một lớp lót:
def parse_tuple(string): try: s = eval(string) if type(s) == tuple: return s return except: returnĐiều này sẽ ném >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 4 nếu bất kỳ phần tử (chuỗi) nào trong bộ tuple không thể chuyển đổi thành >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 5, ví dụ như >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 6 trong chuỗi: >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 7.
print parse_tuple("('A', 'B', 'C')")Điều tương tự có thể đạt được với Regex:Jun 14, 2017 at 6:46
Đã trả lời ngày 13 tháng 12 năm 2017 lúc 23:34Shameem
Jojojojo16 silver badges20 bronze badges
9.4762 Huy hiệu vàng48 Huy hiệu bạc69 Huy hiệu đồng
((2, 'C/C++', 0, 'clang_cpp'), (3, 'Python相关', 0, 'python'))Bạn có thể phân tích chuỗi của mình mà không cần >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 8
Hàm này trả về >>> from ast import literal_eval as make_tuple >>> make_tuple("(1,2,3,4,5)") (1, 2, 3, 4, 5) 9 nếu phân tích thành công. Nếu không, hãy trả lại >>> make_tuple("(1)") 1 >>> make_tuple("(1,)") (1,) 0.
- Đã trả lời ngày 14 tháng 6 năm 2017 lúc 6:46
- Shameemshameem
- 2.47216 Huy hiệu bạc20 Huy hiệu đồng
Chúng ta cũng có thể phân tích nó bởi chính chúng ta. Giả sử chúng ta đã trả lại bởi Python như dưới đây:
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; }
Đây là cách chúng tôi làm điều đóAug 22, 2017 at 3:50
Chúng tôi tiếp tục đọc các ký tự trong chuỗi tuple nhưng lưu trữ vị trí cuối cùng bên trái và có bao nhiêu dấu chấm phẩy chúng tôi gặp (chúng tôi có thể gọi nó là cấp độ bán nguyệt, vì vậy đối với dấu chấm phẩy phải), bất cứ khi nào chúng tôi gặp một dấu chấm phẩy phải, chúng tôi Những điều dưới đây:hcnak
Lấy một chuỗi con từ dấu chấm phẩy cuối cùng đến bán kết bên phải hiện tại.6 silver badges17 bronze badges