2013-06-23 65 views
3

当我用下面的代码列表理解和%功能

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

它给

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

为什么没有给出这个问题的答案? 'i%3'是什么意思?

谢谢。

+0

mylist = []'是多余的。我正在删除它 – jamylak

回答

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。恰巧%也被使用。

+0

优秀!谢谢haidro :) – Emma

+0

@Emma不客气:) – TerryA

2

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)

+0

因此'%'的定义是它是分隔符? – Emma

+0

@Emma它实际上被称为模运算符。有一节[在文档中](http://docs.python.org/2/reference/expressions.html#binary-arithmetic-operations) – TerryA

+0

@Haidro感谢文档 – Emma