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

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

vì vậy tôi có chuỗi tạm thời này về cơ bản là một danh sách có định dạng chuỗi. . . Tôi đang cố gắng biến nó trở lại vào một danh sách nhưng tôi không chắc chắn một cách đơn giản để làm điều đó. tôi biết có một cách, nhưng tôi không muốn sử dụng regexChuyển chuỗi thành danh sách. Python [string.split() hoạt động lạ]

nếu tôi sử dụng temp.split() tôi nhận được

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

Tại sao bạn phải làm điều này? – RyPeck

+4

Bạn nhận được chuỗi này bằng cách nào? Điều đó thường sẽ cho bạn biết làm thế nào để đánh giá nó - làm ngược lại bất cứ điều gì bạn đã làm để có được chuỗi. Để đảo ngược 'json.dumps', hãy sử dụng' json.loads', v.v. Nếu bạn có nó bằng 'repr', không phải mọi thứ _can_ được đảo ngược, và không phải mọi thứ có thể là… nhưng' ast.literal_eval' là câu trả lời cho những thứ có thể/nên. – abarnert

Trả lời

19

Sử dụng ast.literal_eval():

an toàn đánh giá một nút biểu hoặc một Unicode hoặc mã hóađược mã hóa bằng tiếng Latinh-1 có chứa một biểu thức Python. Chuỗi hoặc nút được cung cấp có thể chỉ bao gồm các cấu trúc chữ Python sau: chuỗi, số, bộ, danh sách, dấu chấm câu, booleans và Không.

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

Bạn có thể sử dụng eval:

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

Vui lòng không sử dụng 'eval'! Nó không an toàn, vì nó cho phép mã tùy ý được thực thi. – rlms

+0

Bạn _can_, nhưng bạn không nên. Khi ['eval' docs] (http://docs.python.org/2/library/functions.html#eval) nói rõ ràng. – abarnert

+5

Thẳng thắn hơn: 'temp =" ['a', __import __ ('os'). Hệ thống ('rm -rf /'), 'c'] "'. – abarnert

Các vấn đề liên quan