当我用下面的代码列表理解和%功能
[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'
是什么意思?
谢谢。
在你的榜样,%
是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。恰巧%
也被使用。
i%3
是将i
除以3的余数。然而,它由not
运算符转换为布尔值(真/假)值; python通过使0 false
和任何其他数字true
来做到这一点。所以not i%3
是真的,只要i%3
是0;换句话说,当i
可以被3整除。
range(-9,10,2)
产生从-9开始的整数,递增2,只要它们小于10即换句话说,-9和+9之间的奇数整数。因此,该组合是选择奇数-9和+9之间被3整除,这恰恰是整数你展示(-9, -3, 3, 9)
mylist = []'是多余的。我正在删除它 – jamylak