当我使用以下代码时
[i for i in range(-9, 10, 2) if not i%3)]
它给
> (-9, -3, 3, 9)
为什么会给出这样的答案?是什么'i%3'
意思?
谢谢你。
当我使用以下代码时
[i for i in range(-9, 10, 2) if not i%3)]
它给
> (-9, -3, 3, 9)
为什么会给出这样的答案?是什么'i%3'
意思?
谢谢你。
在您的示例中,%
是模运算符。a % b
返回 的余数a / b
。
因此,在您的示例中,循环通过:
[-9, -7, -5, -3, -1, 1, 3, 5, 7, 9]
-9 % 3
等于 0,因为 -9 可以被 3 整除,因此没有余数。但是,5 % 3
返回 2,因为 3 一次进入 5,并且5 - 3 == 2
.
not i % 3
有点棘手。首先,i % 3
被评估。如果结果大于 0,则认为True
. not
是一个布尔运算符,它获取布尔值的负数。(和)not True
也是如此。False
not False is True
0
被认为是False
,所以 if i % 3 == 0
, theni
将被包含在新列表中。
现在,print("%s %s", ("hello", "world"))
打印“hello world”的原因是因为那不是模运算符。那是字符串格式。文档会比我更好地解释它:p。它只是碰巧%
也被使用。
i%3
是除以 3 时的余数i
。但是,它随后被运算符转换为布尔值(真/假)not
;python 通过制作 0false
和任何其他数字来做到这一点true
。not i%3
为 0时为真i%3
;换句话说,什么时候i
可以被3整除。
range(-9,10,2)
生成从 -9 开始的整数,递增 2,只要它们小于 10。换句话说,就是介于 -9 和 +9 之间的奇数。所以组合是选择在 -9 和 +9 之间能被 3 整除的奇数整数,这正是你显示的整数(-9, -3, 3, 9)