动态嵌套列表,以及相关的理解/映射以查找字符串匹配的索引

时间:2017-04-05 16:39:20

标签: python python-2.7

我正在做的事情的背景:我通过Python脚本翻译两种语言之间的if / then / else语句(现在是2x,但最终可能升级到3x)。我有一个函数从原始语言中获取if / then / else语句并将其分解为[if_clause,then_clause,else_clause]列表。问题是,在then和/或else子句中可能(通常是)嵌套if语句。例如,我会传递一个像......

这样的字符串
if (sim_time<=1242) then (new_tmaxF0740) else if (sim_time<=2338) then (new_tmaxF4170) else (new_tmaxF7100)

...到我的功能,它会返回列表......

['(sim_time<=1242)','(new_tmaxF0740)','if (sim_time<=2338) then (new_tmaxF4170) else (new_tmaxF7100)']

因此,正如您所看到的,在这种情况下,需要通过我用于生成列表的相同函数再次运行else子句来进一步细分,这次只将最后一个列表元素传递给该函数。我正在通过测试原始字符串来查看是否包含多于1个if语句(我已经有了这个的正则表达式),我的想法是使用循环在原始列表中创建嵌套列表,然后可能看起来像......

[if_clause,then_clause,[if_clause,then_clause,else_clause]]

这些可以嵌套任意次数/任何维度。到目前为止,我的计划是编写一个循环来查找下一个嵌套的if语句(使用正则表达式),并通过应用我的if_extract()函数将查找if语句的列表索引重新分配到结果列表中以分解语句

我觉得列表理解可能不会这样做,因为要查找索引,似乎列表理解语句可能需要动态更改。也许更适合地图,但我不确定如何申请?我最终希望遍历循环以返回下一个(但是深度嵌套的)if语句的索引,这样我就可以继续用我的函数将它们分开。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以递归地调用你的函数。

'Mr. Tom A. Suggins'     // Mr. Tom A Suggins
'Mrs.. Jane P Suggins, jr.'   // Mrs. Jane P Suggins, jr
'.Ms.. .Jane P. Suggins' // Ms. Jane P Suggins

我没有测试它,因为我不知道你正在使用什么功能,但我认为这样的事情应该有效