将 if 条件放在列表推导式中的何处?

我得到了以下功能:


x**2 - 4*x + 6

任务是找到 0 到 10 之间的最小整数值 x。我不得不使用for循环:


for i in range(11):

    if 2*i-4==0:

        print("Minimum of the given function is:", i)

这给了我正确的答案2。


现在我应该将其翻译为列表理解,但我不知道将if语句放在哪里:


mylist = [2*i-4==0 for i in range(11)]

print(mylist)

当然,作为输出,我得到一个true/false列表,索引 2 是正确的true. 但是如何在我的列表理解中包含 if 呢?


慕田峪4524236
浏览 280回答 2
2回答

慕丝7291255

您正在查找单个值,而不是值列表。列表理解在这里没有什么意义。您的错误在于将您的测试放在列表理解的值表达式部分。这不是过滤器,而是您从循环中的(过滤的)元素构建新列表值的部分。在循环部分if 之后放一个for:[i for i in range(11) if 2 * i - 4 == 0]这将构建一个只有一个元素的列表,该i值的值为 true:>>> [i for i in range(11) if 2 * i - 4 == 0] [2]如果您必须在一行中执行此操作,请使用生成器表达式,然后使用该next()函数从中获取第一个结果:gen = (i for i in range(11) if 2 * i - 4 == 0) result = next(gen)i即使i在if测试为真的情况下有多个可能的值,这也会为您提供最小值。一个生成器被懒惰地评估;循环在i达到if测试为真的值时停止,并生成该值。next()只返回第一个值,因此不再进行迭代。这就像您break在for循环中使用一样(除非您可以稍后继续循环)。请注意,StopIteration如果生成器不产生任何值,这可能会引发异常。next()在这种情况下,您可以告诉返回默认值;next()如果StopIteration否则会引发,则返回第二个参数:result = next(gen, None)您可以在next()调用中组合生成器表达式;如果生成器表达式是唯一的参数,您可以省略(...)生成器表达式的括号,否则包括它们以便与其他参数区分开:result = next((i for i in range(11) if 2 * i - 4 == 0), None)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python