Python:如何基于布尔变量反转列表成员资格检查?

时间:2018-08-17 22:37:19

标签: python list membership

如何基于布尔变量反转对列表成员资格的检查?

我正在寻找一种简化以下代码的方法:

#  variables: `is_allowed:boolean`, `action:string` and `allowed_actions:list of strings`

if is_allowed:
    if action not in allowed_actions:
        print(r'{action} must be allowed!')

else:
    if action in allowed_actions:
        print(r'{action} must NOT be allowed!')

我觉得必须有一种避免两次进行检查的方法,一次是对in的检查,另一次是对not in的检查,但是找不到一种更详细的方法。

2 个答案:

答案 0 :(得分:2)

将测试结果与is_allowed比较。然后使用is_allowed整理正确的错误消息。

if (action in allowed_actions) != is_allowed:
    print(action, "must" if is_allowed else "must NOT", "be allowed!")

答案 1 :(得分:1)

考虑到特定代码的结构方式,我认为唯一可以做的改进就是将action in allowed_actions存储在变量中:

present = action in allowed_actions
if is_allowed:
    if not present:
        print(r'{action} must be allowed!')

else:
    if present:
        print(r'{action} must NOT be allowed!')