当我使用以下代码时
[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也是如此。Falsenot 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)