【发布时间】:2020-09-10 12:41:57
【问题描述】:
我的问题陈述是使用列表推导式创建一个数字在 1 到 30 之间的列表,条件如下: 如果数字可被 15 整除,列表应包含 a,如果数字可被 5 整除,则列表应包含 b,如果数字可被 3 整除,则应包含数字本身。
我必须只使用列表理解来实现它所以不建议其他方法。
这是我最初的方法:
list=["a" if i%15 is 0
else "b" if i%5 is 0
else i if i%3 is 0
for i in range(1,31)
]
这会在 for 处产生 语法错误。
所以我尝试了这个:
list=["a" if i%15 is 0
else "b" if i%5 is 0
else i
for i in range(1,31)
if i%3 is 0
]
但这最终会忽略第一个 else 条件并给我以下输出。
[3,6,9,12,'a',18,21,24,27,"a"]
现在我不明白为什么这里忽略了 else 条件。我对 python 比较陌生,所以有人可以解释一下我在哪里犯了错误。就像 我 为我的问题陈述写的 not 正确的代码(我知道),如果 else 块代码是等价的。
我也不明白为什么会这样。
list=["a" if i%15 is 0
else "b" if i%5 is 0
else i
for i in range(1,31)
]
这给出的输出显然不适合我的问题陈述,但我很好奇最后没有 if 条件如何使它正常工作。
【问题讨论】:
-
不要使用
is比较数字 -
当您在推导式中将
if i%3 is 0放在for之后时,这意味着任何与该谓词不匹配的项目都将被完全排除在列表之外。 -
预期输出是什么?
-
如果数字不能被 15、5 或 3 整除,应该返回什么?
-
@HarshaBiyani 输出应该是 [3,'b',6,9,'b',12,'a',18,'b',21,24,'b', 27,'a']
标签: python list if-statement list-comprehension