在Python中,如果我有一个范围,并且我想迭代它并将每个数字除以另一个数字,我可以在if语句中这样做。
a = range(20)
for i in a:
if i / 3 == True:
print i
答案 0 :(得分:7)
是的,但是。
请p拜托。永远不要说if some expression == True
。这是多余的,让很多人想知道你在想什么。
更重要的是。
i/3
是商。
i%3
是余下的。如果我是3的倍数,i%3 == 0
。
答案 1 :(得分:2)
在命令提示符下:
>>> [i for i in range(20) if i%3 == 0]
>>> [0, 3, 6, 9, 12, 15, 18]
OR
>>> a = [i for i in range(20) if i%3 == 0]
>>> print a
[0, 3, 6, 9, 12, 15, 18]
>>>
答案 2 :(得分:2)
这里的每个人都做得很好,解释了如何正确地做到这一点。我只想解释你做错了什么。
if i / 3 == True
相当于:
if i / 3 == 1
因为True == 1.所以你基本检查我是否除以3等于1.你的代码实际上会打印3 4 5。
我认为你想要做的是检查我是否是3的倍数。像这样:
if i % 3 == 0
您当然可以使用if语句来执行此操作。或者,如果
,您可以使用list comprehension[x for x in range(20) if x % 3 == 0]
对于那些来自python documentation:
的投票结果布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以被认为是假或真)。 在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1相似。
答案 3 :(得分:0)
嗯,好像你想要一个奇怪的东西 - 你将我除以3并检查它是否等于1。 如4 == True =>假
答案 4 :(得分:0)
简答:不。你不能在python中的if语句中进行赋值。
但实际上,我不明白你在这里要做什么。您的示例代码只打印出数字3,4和5,因为除以3的每个其他值除以1之外的其他值(因此为false)。
如果要将列表中的所有内容除以3,则需要map(lambda x:x / 3,range(20))。如果你想要十进制答案,map(lambda x:x / 3.0,range(20))。这些将返回一个新列表,其中每个元素是原始列表中的数字除以3。
答案 5 :(得分:0)
在自己开发Project Euler时,我发现“if not x % y
”是表示“如果x是y的倍数”的最干净的方法。这相当于“if x % y == 0
”,见于其他答案。我不相信这两者之间存在显着差异;你使用的只是个人偏好的问题。