2013-09-23 12 views
11
temp = "['a','b','c']" 
print type(temp) 
#string 

output = ['a','b','c'] 
print type(output) 
#list 

इसलिए मेरे पास यह अस्थायी स्ट्रिंग है जो मूल रूप से स्ट्रिंग प्रारूप में एक सूची है। । । मैं इसे वापस एक सूची में बदलने की कोशिश कर रहा हूं लेकिन मुझे यह सुनिश्चित करने का एक आसान तरीका नहीं है। मैं एक तरह से पता है, लेकिन मैं नहीं बल्कि का उपयोग नहीं होता regexस्ट्रिंग को सूची में कनवर्ट करें। पायथन [string.split() अजीब अभिनय]

अगर मैं temp.split() का उपयोग मैं

temp_2 = ["['a','b','c']"] 
+2

क्यों आप ऐसा करने की क्या ज़रूरत है? – RyPeck

+4

आपको यह स्ट्रिंग कैसे मिली? आमतौर पर यह आपको बताएगा कि इसका मूल्यांकन कैसे करें- स्ट्रिंग प्राप्त करने के लिए आपने जो भी किया उसके विपरीत करें। 'Json.dumps' को उलट करने के लिए,' json.loads' का उपयोग करें, और इसी तरह। यदि आपको इसे 'repr' द्वारा प्राप्त किया गया है, तो सबकुछ _can_ को उलट नहीं किया जा सकता है, और यह सब कुछ नहीं होना चाहिए ... लेकिन' ast.literal_eval' उन चीजों का उत्तर है जो कर सकते हैं/चाहिए। – abarnert

उत्तर

19

उपयोग ast.literal_eval() मिलती है:

सुरक्षित रूप से एक अभिव्यक्ति नोड या यूनिकोड का मूल्यांकन या लैटिन -1 एन्कोडेड स्ट्रिंग जिसमें पाइथन अभिव्यक्ति है। प्रदान की गई स्ट्रिंग या नोड में केवल निम्नलिखित पायथन शाब्दिक संरचनाएं शामिल हैं: तार, संख्याएं, ट्यूपल्स, सूचियां, डिब्बे, बूलियन, और कोई नहीं।

>>> from ast import literal_eval 
>>> temp = "['a','b','c']" 
>>> l = literal_eval(temp) 
>>> l 
['a', 'b', 'c'] 
>>> type(l) 
<type 'list'> 
0

आप eval उपयोग कर सकते हैं:

>>> temp = "['a', 'b', 'c']" 
>>> temp_list = eval(temp) 
>>> temp_list 
['a', 'b', 'c'] 
>>> temp_list[1] 
b 
+2

कृपया 'eval' का उपयोग न करें! यह असुरक्षित है, क्योंकि यह मनमाने ढंग से कोड निष्पादित करने की अनुमति देता है। – rlms

+0

आप _can_, लेकिन आपको नहीं करना चाहिए। ['Eval' दस्तावेज़] के रूप में (http://docs.python.org/2/library/functions.html#eval) स्पष्ट रूप से कहें। – abarnert

+5

अधिक स्पष्ट रूप से: 'temp = "[' a ', __import __ (' os ')। सिस्टम (' rm -rf/'),' c ']" '। – abarnert

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