2012-07-23 128 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