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

2024-06-26 10:38:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做的事情的上下文:我正在通过Python脚本在两种语言之间翻译if/then/else语句(目前是2x,但最终可能升级到3x)。我有一个函数,它从原始语言中获取if/then/else语句,并将其分解为一个列表[if\u子句,then\u子句,else\u子句]。问题是,在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子句需要进一步分解,方法是通过我用于生成list的相同函数再次运行它,这次只将最后一个list元素传递给该函数。为此,我将测试原始字符串,看看是否包含超过1个if语句(我已经有了用于此的regex),我的想法是使用循环在原始列表中创建嵌套列表,然后可能看起来像。。。你知道吗

[如果子句,那么子句,[如果子句,那么子句,否则子句]]

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

我觉得列表理解可能做不到这一点,因为要找到索引,列表理解语句似乎必须动态地改变。也许更适合地图,但我不知道如何申请?我最终希望遍历循环以返回下一个if语句的索引(不管嵌套有多深),这样我就可以继续用函数将它们分开。你知道吗


Tags: 函数字符串语言列表newiftimesim
1条回答
网友
1楼 · 发布于 2024-06-26 10:38:29

如果我理解正确,可以递归调用函数。你知道吗

def split_if_then_else(str):
    if check_if_if_in_string_function(str)
        if_clause, then_clause, else_clause = split_str_core_function(str)
        then_clause = split_if_then_else(str)
        return [if_clause, then_clause, else_clause]
    else:
        return str

我没有测试它,因为我不知道你到底在使用什么函数,但我认为这样的东西应该可以工作

相关问题 更多 >