為了練習,我試圖計算以下數學運算式:

引數中的 x 值應該是一個數字 - 一個整數或浮點數 引數中的 y 值應該是一個數字串列。
該函式應該回傳與引數中的串列 y 長度相同的值串列。
出于某些尷尬的原因,我只設法讓函式只回傳一個串列元素,該元素來自函式中兩個方程中的第一個。
有問題的代碼是:
def f(x ,y):
list = []
for i in y:
if y[i] <= 0:
list.append(4 * (x ** 3) * y[i] - 2 * x * y[i])
if y[i] > 0:
list.append(4 * (x ** 3) * y[i] 2 * x * y[i])
return list
x_value = 2
y_values = [1,-2, 3, -7]
print(f(x_value, y_values))
#wanted output: [28, -56, 85, -252]
#actual output: [-56]
我的問題是:
- 你如何讓這個函式回傳一個包含所有計算的串列?例如,
[28, -56, 85, -252]而不是當前輸出[-56]
這可能是一個簡單的解決方法,但由于某種原因,我被卡住了。
有沒有好心人幫我解決這個問題?
uj5u.com熱心網友回復:
首先,當您擁有 時for i in y,i是 中的實際值y,而不是索引,因此您不使用y[i],i直接使用。其次,你應該回圈結束return后的最終串列for i in y,所以它需要在回圈之外。最后,不要使用內置名稱(例如list)作為您自己的變數/函式/類名稱,因為它會覆寫內置名稱。
def f(x ,y):
L = []
for i in y:
if i <= 0:
L.append(4 * (x ** 3) * i - 2 * x * i)
if i > 0:
L.append(4 * (x ** 3) * i 2 * x * i)
return L
要i用作索引,您需要將回圈更改為for i in range(len(y)),并y[i]像以前一樣使用。
此外,如果您使用numpy,您可以將其解決為:
>>> import numpy as np
>>> x_value = 2
>>> y_values = np.array([1,-2, 3, -7])
>>> 4 * x_value**3 * y_values 2 * x_value * np.where(y_values <= 0, -y_values, y_values)
array([ 36, -56, 108, -196])
uj5u.com熱心網友回復:
您可以使用串列理解來簡要地完成它:
def f(x,y):
return [4 * (x ** 3) * yy - 2 * x * yy if yy <= 0
else 4 * (x ** 3) * yy 2 * x * yy for yy in y]
或者
def f(x, y)
return [4 * (x ** 3) * yy (int(yy > 0) - 0.5) * 4 * x * yy for yy in y]
為了闡明給出的最后一個例子可能有點神秘:在兩個公式中,兩個元素總是相同的:
4 * (x ** 3) * yy
2 * x * yy
在一種情況下,您將它們相加,在另一種情況下,您取差額:
因此我們可以寫成f(x, y):
def f(x, y):
lst = []
for yy in y:
a, b = 4 * (x ** 3) * yy, 2 * x * yy
lst.append(a (1 if yy > 0 else -1) * b
return lst
雖然有一種情況需要使用適當的 if close,但也有不重寫相同代碼/公式的情況。然后可以更緊湊,知道如果bool(yy > 0)為 1 yy > 0,否則2 * (bool(yy > 0) - 0.5)為0,分別為 1 和 -1:
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382602.html
下一篇:計算所有已排序陣列組合的平均值
