当我使用以下代码时
[i for i in range(-9, 10, 2) if not i%3)]
它给出了
> (-9, -3, 3, 9)
为什么会给出答案? 'i%3'
是什么意思?
谢谢。
答案 0 :(得分:5)
在您的示例中,%
是modulo operator。 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
,因此如果i % 3 == 0
,则i
将包含在新列表中。
现在,print("%s %s", ("hello", "world"))
打印" hello world"是因为那不是模运算符。那是string formatting。文档会比我更好地解释它:p。恰好也使用了%
。
答案 1 :(得分:2)
i%3
是将i
除以3时的余数。但是,它会被not
运算符转换为布尔值(true / false); python通过创建0 false
和任何其他数字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)