使用列表理解创建定义



我尝试使用列表推导而不是标准循环来定义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 = 12
assert 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

我无法分辨出其中的区别,并试图找出原因。欣赏您的想法。谢谢。

如果您真的希望为此使用列表推导式,请按如下所示进行操作:

def get_index(CS, alpha):
l = [i for i, v in enumerate(CS) if v > alpha] or [-1]
return l[0]

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

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

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

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

try:
return next(i for i, v in enumerate(CS) if v > alpha)
except StopIteration:
return -1

最新更新