2010-04-15 85 views
7

如果用戶輸入[[0,0,0], [0,0,1], [1,1,0]]並按回車鍵, 程序應該將此字符串轉換爲幾個列表; 一個列表保持[0][0][0],其餘爲[0][0][1],和[1][1][0]如何將此字符串轉換爲列表清單?

巨蟒是否有處理一個很好的方式,最後一個列表?

+0

目前尚不清楚你想要什麼做。你是否使用'raw_input()'或類似的東西獲得輸入作爲字符串? – 2010-04-15 09:51:23

+0

raw_input。抱歉。我忘了提到這一點。 – Phrixus 2010-04-15 10:19:44

+0

Personman的答案是我可以在Python級別立即理解的最簡單的解決方案。但是,也要感謝所有其他專業的Python用戶! :D閱讀各種不同的,有創意的答案非常有趣!你們真棒! – Phrixus 2010-04-15 10:39:21

回答

1

這比Satoru更靈活一些,不使用任何庫。儘管如此,它還是不適用於嵌套更深的列表。爲此,我認爲你需要遞歸函數(或循環)或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!這是我在python級別即時理解的最簡單的解決方案。也感謝其他python用戶! :D – Phrixus 2010-04-15 10:38:07

+0

@Prixius,這個解決方案沒有得到贊成票的原因。這很容易成爲最醜陋和最不正當的解決方案。我的投票是@ S.Mark的解決方案。 – 2010-04-15 22:03:23

+0

@Marcelo Cantos,謝謝你的建議。也許這可能被認爲是一個糟糕的解決方案,如果親python用戶看到它。但是,他的解決方案僅適用於我的程序,很容易向其他人解釋。 :)最重要的是,我不知道ast或json的東西是什麼......並且想知道是否可以不導入東西..但是,再次感謝您的建議。如果我有一天會更深入地理解python,我也會看看你的答案! – Phrixus 2010-04-15 22:13:48

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

這是隻有Python 2.6+沒有外部模塊 – fabrizioM 2010-04-15 10:14:47

+4

請注意,這將解析表達式爲JSON,*不*作爲Python文字。對於列表和整數和字符串,這大部分是相同的。對於其他類型,如元組,它將不起作用。 – 2010-04-15 10:14:46

+0

@Thomas Wouters你是否與Thomas Wouters一樣,將Python內幕解釋爲google的? – 2010-04-15 13:05:45

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

請不要在沒有解釋它如何執行完全任意的Python代碼的情況下提示eval()。 – 2010-04-15 10:01:49

+0

只需要用戶輸入「exit()」... – thepandaatemyface 2010-04-15 12:37:50

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

元組

>>> 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("],")]

在列表理解列表理解... 但會融化你的大腦