我想知道如何利用Python的if-else和+=
的简写表示这个简单的表达式:
我尝试到处设置括号,并将+=
更改为*=
,但这并没有改变情况。
这按预期工作:
a, b = 0, True
for i in range(123):
if b == True:
a = a + 1
仍然按预期工作,尝试if-else的简写使我想到:
a, b = 0, True
for i in range(123):
a = a + 1 if b == True else a
最后尝试写:
a, b = 0, True
for i in range(123):
a += 1 if b == True else a:
失败了,令人惊讶的是,我很快得到a
的巨大整数
此外,我真的很想找一些更人手的东西,例如:
a, b = 0, True
for i in range(123):
a += 1 if b
for循环需要保持原样,因为在我看来,还有其他操作会影响b
。
答案 0 :(得分:4)
由于似乎没有人发帖,为什么是这样的,这是我的-行:
a = a + 1 if b == True else a
a += 1 if b == True else a
被python视为:
a = (a + 1 if b == True else a)
a += (1 if b == True else a)
这就是为什么在第二版中快速获得大量数字的原因-当a
为a
时,您将b
添加到False
中。如果您想保留if
,请继续:
a += (1 if b else 0)
也不要将b
与True
(或False), go fo
如果是b`进行比较,因为它更pythonic(当其他代码开始与之交互时,它将防止一些奇怪的错误)您的)。
编辑:为@Tomerikoo答案寻求更短的代码,但请记住,这些区域可能是泥泞的,并非所有人都知道/容易理解,将boolean添加到int首先将其视为1(如果{{1,则为0 }}。
答案 1 :(得分:3)
最接近您的亲身经历是:
a, b = 0, True
for i in range(123):
a += b
由于bool
是int的子类型,因此无需进行转换。
答案 2 :(得分:2)
您可以这样做:
for i in range(123):
if b:a+=1
答案 3 :(得分:2)
您也可以这样做:
for i in range(123):
a = a + 1*b
因为布尔值是整数:
>>> isinstance(True, int)
True
>>> True == 1
True
答案 4 :(得分:1)
请注意
a += x if condition else y
如果a += x
为condition
,将解析为True
;否则将为a += y
。这就是为什么您的人数越来越多的原因...
除此之外,我建议您使用U10-Forward's answer的建议。