我正在尝试构建一个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
我对上面的代码做错了什么?谢谢!
发布于 2019-11-25 09:54:48
您将返回第一个元素,将其追加到列表中来修复它。
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]发布于 2019-11-25 09:56:05
return语句在第一次迭代时停止函数的执行,返回一个值,即输入列表的第一项的计算值。
您要寻找的是一个生成器,它将在每次调用该函数时返回一个新值,或者一个列表理解,它将返回一个带有计算值的新列表。
您还可以直接使用numpy数组,因为它似乎是一个依赖项(谢谢@GIRISH Kuni差尔的想法)。
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]发布于 2019-11-25 10:00:01
您可以使用下面的代码,它修复了问题
还请注意,您的代码中的初始问题是在错误的位置使用返回,因为它在第一次迭代时将控件返回给调用行。
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)您还可以在这里使用列表理解,这是一种更复杂的方法,请看下面的代码
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)https://stackoverflow.com/questions/59029103
复制相似问题