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

使用列表理解创建 def

使用列表理解创建 def

宝慕林4294392 2022-06-02 15:53:37
我尝试使用列表推导而不是标准循环来在 python 中定义一个函数。在这里,我想编写一个函数 ,get_index(CS, alpha)它将列表 CS 和阈值 alpha 作为输入,并返回第一个元素的位置索引,例如CS[index] > alpha。例如:CS = [0, 0, 0, 0, 1, 0, 1, 4, 9, 8, 12, 13, 12, 10, 9, 7, 9]alpha = 12assert get_index(CS, alpha) == 11如果在 CS 中没有找到这样的元素,该函数应该返回 -1。我的以下代码由于SyntaxError: invalid syntax.def get_index(CS, alpha):    return i for i, v in enumerate(CS) if v > alpha    return -1但如果我把它放在一个标准循环中,它就可以工作,比如:def get_index(CS, alpha):    for i, v in enumerate(CS):        if v > alpha:             return i    return -1我无法区分并试图找出原因。欣赏你的想法。谢谢你。
查看完整描述

2 回答

?
梦里花落0921

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

如果您真的希望为此使用列表推导,请执行以下操作:


def get_index(CS, alpha):

    l = [i for i, v in enumerate(CS) if v > alpha] or [-1]

    return l[0]

尽管出于多种原因,您的第二个代码要好得多。


发生语法错误,因为不允许在函数内有两个无条件返回。


查看完整回答
反对 回复 2022-06-02
?
哆啦的时光机

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

您可以使用生成器表达式,它类似于列表推导式,但不会创建列表。


调用next评估生成器,直到找到第一个结果,StopIteration如果没有,则引发。


try:

    return next(i for i, v in enumerate(CS) if v > alpha)

except StopIteration:

    return -1


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

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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