2010-04-15 12 views
7

यदि कोई उपयोगकर्ता [[0,0,0], [0,0,1], [1,1,0]] में टाइप करता है और एंटर दबाता है, प्रोग्राम को इस स्ट्रिंग को कई सूचियों में परिवर्तित करना चाहिए; एक सूची [0][0][0] पकड़े, [0][0][1] के लिए अन्य, और [1][1][0]मैं इस स्ट्रिंग को सूचियों की सूची में कैसे परिवर्तित कर सकता हूं?

अजगर इस संभाल करने के लिए एक अच्छा तरीका है के लिए पिछले सूची?

+0

यह स्पष्ट नहीं है कि क्या आप की कोशिश कर रहे के लिए कर। क्या आप 'raw_input()' या कुछ समान का उपयोग कर स्ट्रिंग के रूप में इनपुट प्राप्त कर रहे हैं? –

+0

raw_input। माफ़ कीजिये। मैं उसका उल्लेख करना भूल गया। – Phrixus

+0

व्यक्ति का जवाब सबसे आसान समाधान था जिसे मैं तुरंत अपने पायथन स्तर पर समझ सकता था। हालांकि, अन्य सभी प्रो पायथन उपयोगकर्ताओं के लिए भी धन्यवाद! : डी सभी प्रकार के विभिन्न, रचनात्मक उत्तरों को पढ़ना बहुत दिलचस्प था! तुम लड़के गजब हो! – Phrixus

उत्तर

1

यह सैटरू की तुलना में थोड़ा अधिक लचीला है, और किसी भी पुस्तकालय का उपयोग नहीं करता है। फिर भी, यह अधिक गहराई से घोंसला वाली सूचियों के साथ काम नहीं करेगा। इसके लिए, मुझे लगता है कि आपको एक रिकर्सिव फ़ंक्शन (या लूप), या eval की आवश्यकता होगी।

str = "[[0,0,0],[0,0,1],[1,1,0]]" 
strs = str.replace('[','').split('],') 
lists = [map(int, s.replace(']','').split(',')) for s in strs] 

सूचियां अब सूचियां की सूची है।

+0

Thx! यह सबसे आसान समाधान था जिसे मैं तुरंत अपने पायथन स्तर पर समझ सकता था। अन्य अजगर उपयोगकर्ताओं के लिए भी धन्यवाद! : डी – Phrixus

+0

@ पिक्सियस, इस कारण को कोई समाधान नहीं मिला है। यह आसानी से सबसे उग्र और सबसे विकृत समाधान है। मेरा वोट @ एसमार्क के समाधान के लिए है। –

+0

@ मार्सेलो कैंटोस, आपकी सलाह के लिए धन्यवाद। समर्थक पायथन उपयोगकर्ता इसे देखते हैं तो शायद यह एक खराब समाधान माना जा सकता है। हालांकि, उनका समाधान सिर्फ मेरे कार्यक्रम के लिए काम करता है और दूसरों को समझाना आसान है। :) सबसे अधिक, मुझे कोई सुराग नहीं है कि अस्थिर या जेसन चीजें क्या हैं ... और सोच रही थी कि चीजों को आयात किए बिना यह संभव है .. लेकिन, फिर से आपकी सलाह के लिए धन्यवाद। यदि मैं किसी दिन गहराई से समझता हूं तो मैं भी आपके उत्तरों पर एक नज़र डालूंगा! – Phrixus

17
>>> import json 
>>> json.loads('[[0,0,0], [0,0,1], [1,1,0]]') 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 
+0

यह बाहरी मॉड्यूल के बिना केवल पायथन 2.6+ है – fabrizioM

+4

ध्यान दें कि यह जेएसओएन, * नहीं * पायथन शब्दशः के रूप में अभिव्यक्ति को पार करता है। सूचियों और पूर्णांक और तारों के लिए यह ज्यादातर वही है। अन्य प्रकार के लिए, जैसे टुपल्स, यह काम नहीं करेगा। –

+0

@ थॉमस वौटर क्या आप वही थॉमस वौटर हैं, जो पाइथन इंटर्नल को गुगलर्स के बारे में बताते हैं? –

0
>>> import re  
>>> list_strs = re.findall(r'\[\d+\,\d+\,\d+\]', s) 
>>> [[[int(i)] for i in l[1:-1].split(',')] for l in list_str] 
-2
>>> string='[[0,0,0], [0,0,1], [1,1,0]]' 
>>> eval(string) 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 
>>> a=eval(string) 
>>> a 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 

eval() करने के लिए अपने स्ट्रिंग पार करने से पहले, पहले आवश्यक सफ़ाई करता है।

+5

कृपया यह बताए बिना eval() का सुझाव न दें कि यह पूरी तरह से मनमाने ढंग से पाइथन कोड कैसे निष्पादित करता है। –

+0

यह सब उपयोगकर्ता लेता है "निकास()" दर्ज करने के लिए उपयोगकर्ता ... – thepandaatemyface

17
>>> import ast 
>>> ast.literal_eval('[[0,0,0], [0,0,1], [1,1,0]]') 
[[0, 0, 0], [0, 0, 1], [1, 1, 0]] 

tuples

>>> ast.literal_eval('[(0,0,0), (0,0,1), (1,1,0)]') 
[(0, 0, 0), (0, 0, 1), (1, 1, 0)] 
1

[[int(i) for i in x.strip(" []").split(",")] for x in s.strip('[]').split("],")]

एक सूची समझ में एक सूची समझ ... लेकिन यह है कि आपके दिमाग पिघल जाएगा

संबंधित मुद्दे

 संबंधित मुद्दे