Python 函数只输出一个结果,而不是采用不同的输入



我正在尝试构建一个Python函数,该函数接受列表中的大量输入(无限期(,如下所示:

def limit(x_es):
for x in x_es:
return np.sqrt((3-5*x + x**2 + x**3)) / (x-1)

numbers= [1.1, 1.01, 1.001]
limit(numbers)

但它只输出一个结果,而不是列表中的三个输出:2.0248456731316713

我上面的代码做错了什么?谢谢!

return语句在第一次迭代时停止函数执行,返回单个值,即输入列表第一项的计算值。

您要查找的是一个生成器,每次调用函数时都会返回一个新值,或者是一个列表推导式,它将返回一个包含计算值的新列表。

您也可以直接使用 numpy 数组,因为您似乎将其作为依赖项(感谢 @GIRISH kuniyal 的想法(。

import numpy as np
# Generator
def limit_generator(x_es):
for x in x_es:
yield np.sqrt((3-5*x+x**2+x**3))/(x-1)
# List comprehension
def limits(x_es):
return [np.sqrt((3-5*x+x**2+x**3))/(x-1) for x in x_es]
# Numpy arrays
def numpy_limits(x_es):
x = np.array(x_es)
return np.sqrt((3-5*x+x**2+x**3))/(x-1)
if __name__ == '__main__':
numbers = [1.1, 1.01, 1.001]
generator = limit_generator(numbers)
print(next(generator), next(generator), next(generator))
print(limits(numbers))
print(numpy_limits(numbers))
2.0248456731316713 2.00249843945087 2.000249984482112
[2.0248456731316713, 2.00249843945087, 2.000249984482112]
[2.02484567 2.00249844 2.00024998]

您返回第一个元素,请通过附加到列表来修复它

def limit(x_es):
result = []
for x in x_es:
result.append(np.sqrt((3-5*x+x**2+x**3))/(x-1))
return result   
numbers= [1.1, 1.01,1.001]        
limit(numbers)
#[2.0248456731316713, 2.00249843945087, 2.000249984482112]

希望这段代码可能对您有所帮助。

def limit(x_es):
numbers = np.array(x_es)
return np.sqrt(3-(5*numbers)+(numbers**2)+(numbers**3))/(numbers-1)
numbers= [1.1, 1.01,1.001]        
limit(numbers)

这很容易使用 numpy 数组完成,与 python 列表相比,它的速度也很快。

您可以使用以下代码来解决问题

另请注意,代码中的初始问题是您在错误的位置使用 return,因为它在第一次迭代本身时将控件返回到调用行。

import numpy as np
def limit(x_es):
result = []
for x in x_es:
result.append(np.sqrt((3-5*x+x**2+x**3))/(x-1))
return result

if __name__ == '__main__':
numbers= [1.1, 1.01,1.001]
limit(numbers)

你也可以在这里使用列表推导,这是一种更pythonic的方式,看看下面的代码

import numpy as np
if __name__ == '__main__':
numbers= [1.1, 1.01,1.001]
#print(limit(numbers))
list = []
list = [np.sqrt((3-5*x+x**2+x**3))/(x-1) for x in numbers ]
print(list)

最新更新