簡體   English   中英

如何使用先前在循環(列表)中定義的變量來實現單獨的功能?

[英]How can I use a variable that I previously defined in a loop (which is a list) for a separate function?

我有一個要讀取的文本文件,並且創建了兩個名為ppmpeakAvg變量。 peakAvg是我要重用的變量,它是在循環中定義的。 這是我的代碼:

df2 = pd.read_table(expAtoms,delimiter = " ", header = None)
df2.rename(columns={0:"atom",1:"value"}, inplace=True)
df2.groupby('atom').value.mean()

for atom in df2.atom.unique():
    ppm = df2.where(df2.atom==atom).value.dropna()
    peakAvg = ppm.mean()
    getQMulti(ppm,peakAvg,errorLim)

我獲得peakAvg的方法是從文本文件中讀取某些值(這就是ppm )。 從這些值中,我按名稱將它們分組(這是atom )。 但是, peakAvg是通過獲取所有ppm值(即數字)並按其基團( atom )取其平均值來生成的

變量peakAvg看起來像這樣(即:如果我打印了peakAvg的值,它將看起來像這樣):(這只是一個片段,但最后一個數字是列表中的實際最后一個數字)

5.14823 
7.70533666667
5.69855333333
7.5981
5.79998333333
8.09575666667
7.4699025
7.60002

在上面的循環中,我將我的函數getQMulti調用,我想將我的變量peakAvg用於創建的另一個函數getQPred 這是我的第二個循環(我稱之為getQPred )的樣子:

for atom2 in df3.atom2.unique():
    ppm2=df3.where(df3.atom2==atom2).value2.dropna()
    getQPred(ppm2,peakAvg)

現在,如果我打印出peakAvg是什么,我只會得到一個數字的列表(這只是一個片段,但整個列表就是這個數字):

7.60002
7.60002
7.60002
7.60002
7.60002
7.60002
7.60002
7.60002

如何使我的peakAvg變量恢復為以前的值(即,我擁有的第一個數字列表),因為現在當我調用函數getQPred ,會得到不准確的結果。

編輯:這些是我正在使用的功能:

SQRT2 = math.sqrt(2.0)
ERRMUL=2.0

errorLim = 0.3
sigma = 0.5

def getQ(x):
    q = np.log(1.0-erf(np.absolute(x)/SQRT2))
    return q
def getQMulti(ppm,peakAvg,errorLim):
    x=(ppm-peakAvg)/errorLim
    q= getQ(x)
    x0 = 2.0
    q0 = getQ(x0)
    QMulti = 1.0+(q/np.absolute(q0))   
    return QMulti
def getQPred(ppm,peakAvg):
    x = (ppm-peakAvg)/sigma
    q = getQ(x)
    x0 = 1.5
    q0 = getQ(x0)
    QPred = 1.0+(q/np.absolute(q0))
    return QPred

在您的代碼中, peakAvg 不是一個列表,它是單個值,每次通過循環都會更改。

執行此操作的方式如下所示:

peakAvg_list = []
for something in whatever:
    do_something_with_ppm
    peakAvg = ppm.mean()
    peakAvg_list.append(peakAvg)
    do_something_with_peakAvg 

也就是說,首先將peakAvg_List初始化為一個空列表,然后每次通過該列表時, append peakAvg的新值peakAvg到列表中。 這樣, peakAvg_list包含了您想要的所有內容的列表,如果需要,您可以return它們。

如果要對列表做進一步的處理,可以執行另一個循環:

for peakAvg in peakAvg_List:
    x = (ppm - peakAvg)/sigma
    ### do something with x

但是您需要弄清楚該代碼的最終輸出/目標是什么。 您是否要列出正在計算的所有QPred數量? 還是您需要以某種方式將它們收集到一個數字中? 答案取決於您實際要執行的操作,這與Python語法是分開的...

另外,鑒於您有興趣對各種列表的所有元素執行相同的操作,因此您應該了解numpy (通常,您可能需要學習Python中的列表和循環,這是非常基本的概念,因此您可能要從類似Python官方教程的東西開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM