当我遇到障碍时,我试图在 Godel, Escher, Bach 一书中编写 MIU 形式系统。我对计算机科学和python相当陌生,因此是基础问题。
derivations = [[0,'MI'],[1,'MII','MIU'],[2,'MIUIU','MIIU','MIII']]
我想创建派生子索引的索引,这些索引在每个子索引的开头都有一个树深度号。通过该整数隔离这些子索引以通过循环运行以下字符串的最佳方法是什么。
提前致谢
在我看来,你想要这样的东西:
depthDict = {x[0]:x[1:] for x in derivations}
它将带您列出列表并dict
以第一个元素为键构造 a 。这样,您可以通过树深度号访问字符串列表,如下所示:
print depthDict [1] # prints ['MII', 'MIU']
或者
for myString in depthDict[3]:
print myString # prints MII and MIU
如果您正在搜索特定的子索引,您可以通过以下方式进行:
>>> 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)
wheregenerate_more_strings(my_string)
将生成给定字符串的变体。