3

当我使用以下代码时

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

它给

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

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

谢谢你。

4

2 回答 2

5

在您的示例中,%模运算符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也是如此。Falsenot False is True

0被认为是False,所以 if i % 3 == 0, theni将被包含在新列表中。


现在,print("%s %s", ("hello", "world"))打印“hello world”的原因是因为那不是模运算符。那是字符串格式。文档会比我更好地解释它:p。它只是碰巧%也被使用。

于 2013-06-23T03:38:51.307 回答
2

i%3是除以 3 时的余数i。但是,它随后被运算符转换为布尔值(真/假)not;python 通过制作 0false和任何其他数字来做到这一点truenot i%3为 0时为真i%3;换句话说,什么时候i可以被3整除。

range(-9,10,2)生成从 -9 开始的整数,递增 2,只要它们小于 10。换句话说,就是介于 -9 和 +9 之间的奇数。所以组合是选择在 -9 和 +9 之间能被 3 整除的奇数整数,这正是你显示的整数(-9, -3, 3, 9)

于 2013-06-23T02:52:56.653 回答