为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2021-06-08 13:54:26
我得到了以下功能: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 呢?
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您正在查找单个值,而不是值列表。列表理解在这里没有什么意义。

您的错误在于将您的测试放在列表理解的值表达式部分。这不是过滤器,而是您从循环中的(过滤的)元素构建新列表值的部分。

在循环部分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即使iif测试为真的情况下有多个可能的值,这也会为您提供最小值。

一个生成器被懒惰地评估;循环在i达到if测试为真的值时停止,并生成该值。next()只返回第一个值,因此不再进行迭代。这就像您breakfor循环中使用一样(除非您可以稍后继续循环)。

请注意,StopIteration如果生成器不产生任何值,这可能会引发异常。next()在这种情况下,您可以告诉返回默认值;next()如果StopIteration否则会引发,则返回第二个参数:

result = next(gen, None)

您可以在next()调用中组合生成器表达式;如果生成器表达式是唯一的参数,您可以省略(...)生成器表达式的括号,否则包括它们以便与其他参数区分开:

result = next((i for i in range(11) if 2 * i - 4 == 0), None)


查看完整回答
反对 回复 2021-06-29
  • 2 回答
  • 0 关注
  • 279 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号