2012-07-23 121 views
0

當我碰到路障時,我試圖編寫出Godel,Escher,Bach書中的MIU Formal系統。我對計算機科學和python相當陌生,因此是基礎問題。在python中搜索索引

derivations = [[0,'MI'],[1,'MII','MIU'],[2,'MIUIU','MIIU','MIII']] 

我想創造派生具有在各子指標的開頭樹深度多個子指標的指數。通過該整數來隔離這些子索引以通過循環運行以下字符串的最佳方法是什麼?

在此先感謝

+2

我不明白你的問題。給定輸入的預期輸出是多少? – inspectorG4dget 2012-07-23 03:17:04

+1

Hi @ user1544819,當問題包含從輸入到輸出所需的所有信息時,堆棧溢出問題最有效。自從我閱讀GEB以來,已經有一段時間了,所以爲了自己和其他人的利益,您應該將衍生規則添加到您的文章中,以便人們可以自行測試出版物。 – Marius 2012-07-23 03:45:46

+0

我完全理解,我也在屏蔽自己,爲自己解決整件事。我特別想要索引問題,但是當我完成後我會在這裏發佈它。我確信有一些很好的方法可以使我從這個方法中獲得更高的效率。 – underarock 2012-07-23 05:59:51

回答

0

如果您正在尋找具體的分指數,你可以通過做:

>>> sub_indexes = [index for index where index[0] == 1] 
>>> sub_indexes 
[[1,'MII','MIU']] 

這將返回有1.注意結果的深度的所有子指數將符合該搜索條件的所有索引列表,因此要獲得索引,你需要做的:

>>> sub_index = sub_indexes[0] 
>>> sub_index 
[1, 'MII', 'MIU']] 

在此之後,你可以處理通過串:

depth = sub_index[0] 
for mu_string in [item for item in sub_index if hasattr(item, 'count')]: 
    new_strings = generate_more_strings(mu_string, depth) 

其中generate_more_strings(my_string)將產生給定字符串的變化。

depthDict = {x[0]:x[1:] for x in derivations} 

,將帶你列出的清單,並建立一個與dict作爲關鍵的第一個元素:

+0

感謝您的建議和技巧! – underarock 2012-07-23 06:00:28

1

像你想要的東西,聽起來這好像是給我。這樣,您就可以通過樹的深度數像這樣訪問你的字符串列表:

print depthDict [1] # prints ['MII', 'MIU'] 

for myString in depthDict[3]: 
    print myString # prints MII and MIU 
+0

這很有道理。我已經翻譯過字典,只需要進修就可以讓我盯住這個最有用的選項。謝謝! – underarock 2012-07-23 06:01:23

+0

好吧,讓我們知道這是否解決了您的問題。 – Aesthete 2012-07-23 07:22:59