【问题标题】:Python ternary operator and assignment in elsePython三元运算符和else中的赋值
【发布时间】:2014-02-12 05:07:57
【问题描述】:

三元运算符非常有用,为什么它在这种特殊情况下不起作用:

c="d"
d={}
d[c]+=1 if c in d else d[c]=1

它给出:

d[c]+=1 if c in d else d[c]=1
                           ^
SyntaxError: invalid syntax

我认为这里没有任何问题,因为没有三元运算符的情况相同:

c="d"
d={}
if c in d:
    d[c]+=1
else:
    d[c]=1

【问题讨论】:

  • 对于这种情况,使用默认字典。 from collections import defaultdict; d = defaultdict(int); d[c] += 1.
  • @RemcoGerlich:当你可以只使用Counter 时,为什么要模拟Counterdefaultdict
  • @abarnert:习惯的力量?我总是首先记住defaultdict,因为它出现在Counter 之前,而且更通用。
  • @abarnert:谢谢,我总是忘记 Counter 有多酷
  • 我们至少可以称它为 conditional expression。它是 a 三元运算符,但 SQL BETWEEN ... AND ... 表达式也是如此。

标签: python python-2.7 dictionary conditional-operator


【解决方案1】:

三元运算符适用于表达式,而不是语句。赋值是一个声明。使用普通的if/else

【讨论】:

  • 或使用defaultdictd[c] += 1。或者d[c] = d.get(c, 0) + 1.
  • @Blender:不要使用defaultdict(int) 模拟Counter。需要时使用Counter
  • Counter 没有得到尊重,我告诉你。前几天有个女孩打电话说:“过来,家里没人。”它过去了,没有人在家。我告诉你,它就是得不到尊重。
【解决方案2】:

正确的写法是:

d[c] = (d[c] + 1) if c in d else 1

【讨论】:

  • 我认为 Blender 的 d.get(c, 0) 更清晰(并且还避免了两次查找 c),但这很有效,如果 OP 能理解它,那就太好了。
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 2011-07-02
  • 2021-04-29
  • 2021-11-23
  • 2023-04-03
  • 2015-08-24
  • 2011-03-06
  • 2012-02-14
相关资源
最近更新 更多