列表理解和%函数

时间:2013-06-23 02:47:31

标签: python list list-comprehension

当我使用以下代码时

[i for i in range(-9, 10, 2) if not i%3)] 

它给出了

> (-9, -3, 3, 9)

为什么会给出答案? 'i%3'是什么意思?

谢谢。

2 个答案:

答案 0 :(得分:5)

在您的示例中,%modulo operatora % 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,则将其视为Truenot是一个布尔运算符,它获取布尔值的负数。因此not TrueFalse(和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)