दिलचस्प पोस्ट
आपको अनावश्यक सी # निर्देशों का उपयोग क्यों करना चाहिए? कैसे एक सूची की एक नई गहरी कॉपी (क्लोन) बनाएँ <टी>? नहीं 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर अनुरोधित संसाधन पर मौजूद है- अंगुलियोज़ Android को कैसे कॉपी करें: संपादन = "गलत" कोड में? जावा परावर्तन का उपयोग करके सुपरक्लास विधि को कैसे कॉल किया जाए ITextSharp एक मौजूदा पीडीएफ पाठ डालें जावा में NoClassDefFoundError: com / google / common / base / फ़ंक्शन सी # में यूआरआई स्ट्रिंग से फ़ाइल नाम प्राप्त करें ग्रिडविव्यू के साथ दो कॉलम और ऑटो रीसाइज किए गए छवियां कमांड लाइन से एक्लिप्स जावा प्रोजेक्ट बनाएँ AddBusinessDays और GetBusinessDays फायदे बनाम। स्थानीय रूप से jQuery के होस्ट होने का नुकसान जावा में "कोड बहुत बड़ा" संकलन त्रुटि बाश में तार की एक सरणी के माध्यम से लूप? क्यों मेरी jQuery: नहीं () चयनकर्ता सीएसएस में काम नहीं कर रहा है?

स्ट्रिंग से ट्यूपल को पार्स करते हैं?

कहें कि मेरे पास एक स्ट्रिंग है जो एक समान रूप में है, उदाहरण के लिए, "(1,2,3,4,5)" होना चाहिए। एक वास्तविक टपल में बदलने का सबसे आसान तरीका क्या है? मैं क्या करना चाहता हूँ का एक उदाहरण है:

 tup_string = "(1,2,3,4,5)" tup = make_tuple(tup_string) 

स्ट्रिंग पर चलने वाले tuple() बस पूरी चीज़ को एक बड़ा ट्यूपल बनाते हैं, जबकि मैं जो करना चाहता हूं वह स्ट्रिंग को ट्यूपल के रूप में समझता है। मुझे पता है कि मैं इसके लिए एक रेगेक्स का उपयोग कर सकता हूं, लेकिन मैं उम्मीद कर रहा था कि वहां कम महंगा तरीका है। विचार?

वेब के समाधान से एकत्रित समाधान "स्ट्रिंग से ट्यूपल को पार्स करते हैं?"

यह पहले से मौजूद है !

 >>> 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,) 

अगर आपका इनपुट प्रारूप पायथन से अलग काम करता है, तो आपको उस मामले को अलग से संभालना होगा या किसी अन्य पद्धति का उपयोग करना होगा जैसे tuple(int(x) for x in tup_string[1:-1].split(','))

आप SyntaxError बिना अपनी स्ट्रिंग पार्स कर सकते हैं

 def parse_tuple(string): try: s = eval(string) if type(s) == tuple: return s return except: return 

यदि यह पार्स सफलता है तो यह फ़ंक्शन Tuple वापस करता है अन्यथा None रिटर्न None

 print parse_tuple("('A', 'B', 'C')") 

हम इसे स्वयं द्वारा पार्स कर सकते हैं। मान लें कि हमारे पास ट्यूपल को पायथन द्वारा नीचे दिया गया है:

 ((2, 'C/C++', 0, 'clang_cpp'), (3, 'Python相关', 0, 'python')) 

यहाँ हम कैसे कर रहे हैं

सबसे पहले, हम ट्यूपल स्ट्रिंग में वर्णों को पढ़ते रहें हैं, लेकिन पिछले बाएं अर्द्धविराम की स्थिति को स्टोर करते हैं और हम कितने सेमीिकलन से मिलते हैं (हम इसे अर्धविराम स्तर छोड़ सकते हैं, सही सेमिकलन के लिए), जब भी हम एक सही अर्धविराम से मिलते हैं, हम करते हैं नीचे बातें:

  1. पिछले सेमीकोलन से वर्तमान सही सेमीकोलन तक ले जाओ। (इस उप-substring में, कोई और अर्धविराम नहीं है, हम इसे "सरणी" में विभाजित करते हैं। चलिए कहते हैं कि नई सरणी M )
  2. फिर हम अपने परिणाम सरणी में M को जोड़ते हैं, जो सरणी सभी M को स्टोर करेगा
  3. तीसरा, हम मूल स्ट्रिंग से लिया गया एस्ट्रिंग हटाएं। अंत में, सही और बाएं सेमीकोलन स्तर तक चरण 1 जैसी ही बातें करें जो 0 से आता है।

जावास्क्रिप्ट कोड नीचे की तरह है:

 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; }