在Python中优化树

Beh*_*ton 2 python if-statement

我有一个"if decision tree",我想知道是否可以优化它:

    def s(a, b):
    """
    :param a: 0,1,2
    :param b: 0,1,2
    :return: 0,1,2
    """
    if a == 0:
        if b == 0:
            return 2
        elif b == 1:
            return 2
        else:  # b == 2
            return 0
    elif a == 1:
        if b == 0:
            return 2
        elif b == 1:
            return 2
        else:  # b == 2
            return 1
    else:  # a==2
        if b == 0:
            return 0
        elif b == 1:
            return 1
        else:  # b==2
            return 2
Run Code Online (Sandbox Code Playgroud)

包括所有情况,我正在尝试使用(a,b)==(1,2)或(a,b)==(2,1)返回1并返回0时相同.其他情况返回2,但它比较慢

编辑:我已经测试(时间和有效(所有有效))所有提出的"ifs"和:s是我的显式函数ss是第一个提出的函数sss是第二个提出的函数等,这里我有个人资料: 简介所有功能

pok*_*oke 5

只需通过比较元组来明确地检查这些值,并2在所有其他情况下返回:

v = (a, b)
if v == (1, 2) or v == (2, 1):
    return 1
elif v == (0, 2) or v == (2, 0):
    return 0
else:
    return 2
Run Code Online (Sandbox Code Playgroud)

您甚至可以更进一步思考您的支票的作用:如果任何数字为2,则返回另一个数字.

if a == 2:
    return b
elif b == 2:
    return a
else:
    return 2
Run Code Online (Sandbox Code Playgroud)

通常,您当然也可以创建一个精确的映射,例如使用字典,它允许您直接查找结果(而不是具有复杂的if/else结构).但是当你确定结果的逻辑确实适合单个句子时,那么你应该真正尝试以保持简洁逻辑完整的方式实现它.否则,很难发现错误(例如,我花了一些时间来验证你的if/else代码是否真的按你所说的那样做).当然,您可以在单元测试中始终使用这些不同的可能组合,以确保您的逻辑实际涵盖了所有这些.