【问题标题】:Python: In-place "not'ing" of booleansPython:就地“不”布尔值
【发布时间】:2023-04-02 09:39:02
【问题描述】:

我有时有一个布尔值字典,如下所示;

d = {'a': True, 'b': False, 'c': False}

我将其用作开关的集合,这些开关都必须打开 (True) 才能进行某些操作。在迭代时,这些开关会被翻转,例如

for char in text:
    if char == '0':
        d['a'] = not d['a']  # State of 'a' is switched
    ...

'a' 必须在上面查找两次这一事实困扰着我。如果我用1-1 表示开关的值,我可以像d['a'] *= -1 那样进行切换,它只引用d['a'] 一次。

理想情况下,Python 会为我提供就地“非赋值”运算符。

【问题讨论】:

  • 从集合中添加/删除可能更有意义(在集合中表示True,否则为False),而不是尝试切换字典值。取决于具体的用例。
  • @Carcigenicate 如何在单个语句中执行此“添加或删除”操作?
  • 您可以使用与您的答案所暗示的几乎相同的语法:s = {1, 2}; s ^= {3}; print(s); s ^= {3}; print(s)。我最初的建议更多是关于在这个用例中使用字典。我觉得 Set 是一个更好的容器,除非您需要跟踪所有三个“可见但真实”、“可见但虚假”和“未见”,在这种情况下,字典更有意义。

标签:
python
python-3.x
boolean
assignment-operator