Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法将字符串中的?:运算符转换为python条件语句?_Python - Fatal编程技术网

有没有办法将字符串中的?:运算符转换为python条件语句?

有没有办法将字符串中的?:运算符转换为python条件语句?,python,Python,我正在使用python解析一个文本文件,其中包含三元运算符a?b:c 如果a else c,我想将?:运算符转换为python条件语句b 例如: expression = "(2.4**l2) + 8.0*( (l3>=l4) ? k2:k3 )" converted_expression = "(2.4**l2) + 8.0*(k2 if (l3>=l4) else k3 )" 嗯,这可能有点有限,但您可以使用以下方法: converted_expression = "(2.4*

我正在使用python解析一个文本文件,其中包含三元运算符a?b:c

如果a else c,我想将?:运算符转换为python条件语句b

例如:

expression = "(2.4**l2) + 8.0*( (l3>=l4) ? k2:k3 )"
converted_expression = "(2.4**l2) + 8.0*(k2 if (l3>=l4) else k3 )"

嗯,这可能有点有限,但您可以使用以下方法:

converted_expression = "(2.4**l2) + 8.0*([k3,k2][bool(l3>=l4)])"

bool(…)部分将返回FalseTrue,这将分别自动转换为0和1作为列表索引。

嗯,这可能有点有限,但您可以使用以下方法:

converted_expression = "(2.4**l2) + 8.0*([k3,k2][bool(l3>=l4)])"

bool(…)部分将返回FalseTrue,并将其分别自动转换为0和1作为列表索引。

使用正则表达式如何?这个特殊的正则表达式不关心空间,为了清晰起见,它使用命名的捕获组

import re

regex = re.compile(r'\((?P<cond>.*)\) ?\? ?(?P<if_true>.+):(?P<if_false>.+)')

string = '(l3>=l4) ? k2:k3'
match = regex.search(string)
print('{if_true} if {cond} else {if_false}'.format(if_true=match.group('if_true'),
                                                   cond=match.group('cond'),
                                                   if_false=match.group('if_false')))

# k2 if l3>=l4 else k3
重新导入
regex=re.compile(r'\(?P.*)?\??(?P.+):(?P.+)'))
字符串='(l3>=l4)?k2:k3'
match=regex.search(字符串)
打印({if\u true}if{cond}else{if\u false})。格式(if\u true=match.group('if\u true'),
cond=match.group('cond'),
if_false=match.group('if_false'))
#如果l3>=l4,则为k2,否则为k3

使用正则表达式怎么样?这个特殊的正则表达式不关心空间,为了清晰起见,它使用命名的捕获组

import re

regex = re.compile(r'\((?P<cond>.*)\) ?\? ?(?P<if_true>.+):(?P<if_false>.+)')

string = '(l3>=l4) ? k2:k3'
match = regex.search(string)
print('{if_true} if {cond} else {if_false}'.format(if_true=match.group('if_true'),
                                                   cond=match.group('cond'),
                                                   if_false=match.group('if_false')))

# k2 if l3>=l4 else k3
重新导入
regex=re.compile(r'\(?P.*)?\??(?P.+):(?P.+)'))
字符串='(l3>=l4)?k2:k3'
match=regex.search(字符串)
打印({if\u true}if{cond}else{if\u false})。格式(if\u true=match.group('if\u true'),
cond=match.group('cond'),
if_false=match.group('if_false'))
#如果l3>=l4,则为k2,否则为k3

示例中的表达式非常简洁;大量的空格等。情况总是这样吗?@Ev.Kounis不,它可能是任何东西:(我会找到“?”标记,并提取标记(具有偶数个打开/关闭参数)以获得左侧和右侧标记,然后对最右侧的标记
。如果没有任何嵌套的“?”标记,也可以使用相同的方法表达式您在示例中使用的表达式非常干净;有大量空格等。是否总是这样?@Ev.Kounis不可能是任何东西:(我会找到“?”标记,并提取标记(使用偶数个打开/关闭参数)若要获取左和右标记,则对最右边的标记(
)执行相同的操作。如果没有任何嵌套的“?”表达式,则可以执行此操作。OP希望创建一个字符串,而不是计算表达式。@DeepSpace噢。我认为问题在于一行python等价于ternar(条件?如果为true:如果为false)operator.OP想要创建一个字符串,而不是对表达式求值。@DeepSpace噢。我认为问题在于一行python等价于ternar(条件?if true:if false)运算符。