当我使用以下代码时:
为什么会得到那个答案?'
谢谢。
[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
,所以如果i % 3 == 0
,那么i
将包含在新列表中。
print("%s %s", ("hello", "world"))
输出"hello world"的原因是因为这不是模运算符。这是字符串格式化。文档会比我解释得更好:p。只是碰巧使用了%
。i%3
是将 i
除以 3 的余数。但是,它会被 not
运算符转换为布尔值(true/false);Python 通过使 0 为 false
,任何其他数字为 true
来实现这一点。因此,只有当 i%3
为 0 时,not i%3
才为 true;换句话说,当 i
可以被 3 整除时,它才为 true。
range(-9,10,2)
产生从 -9 开始以 2 递增的整数,只要它们小于 10。换句话说,它产生了介于 -9 和 +9 之间的奇数整数。因此,选择在 -9 和 +9 之间可被 3 整除的奇数整数的组合,这些整数恰好是你展示的整数 (-9, -3, 3, 9)
。
%
的行为可以进行自定义。对于数字,它作为模数,对于字符串,它执行旧的字符串格式化。我建议使用新的字符串格式化 '{0}'.format(1)
,而不是 %d' % 1
。 - jamylak
mylist = []
是多余的。我正在删除它。 - jamylak