2017-05-25 24 views
0

所以。我正在編寫一份作業代碼。我有一組大量的數據(包含性別,職業和體重),並將其大致分爲學生/非學生和男性/女性。我應該先檢查並做相應的計劃,還是應該檢查每項數據?

問我通過數據過濾(已經做了,使用帶參數應用功能),這樣我就可以得到:

  • 每重量
  • 與每個學生的體重列表的列表
  • 每陽剛學生的體重名單
  • 與每一個女性學生的體重
  • 與每一個非學生的體重列表的列表

但我懷疑:我是否應該遍歷大列表中的每個元素並檢查每個元素,還是應該爲每個限制創建一段代碼?哪一個是最有效的/ pythonic的事情?

的數據被安排在子表像

['E', '23', 'M', 'AC', 96.5, 0.69, '130.28'] 

其中,爲了它告訴如果學生/ nonstudent,年齡,性別,如果前/飲食,體重的測量的預期誤差後重量和測量時間。

現在我正在迭代,然後用以下代碼檢查。

def datafilter(fil=False,est=None,sex=None): 
    Data=[] 
    if not fil: 
     for q in dreal(): 
      for w in q: 
       Data.append(w[4]) 
     return Data 
    if fil: 
     for q in dreal(): 
      for w in q: 
       if est is True and w[0]=='E': 
        if sex is None: 
         Data.append(w[4]) 
        if w[2]==sex: 
         Data.append(w[4]) 
       if est is False and w[0]!='E': 
        Data.append(w[4]) 
     return Data 
+0

這是設計不良使用列出了這一點 - 所有這些硬編碼索引使代碼難以理解。使用對象或字典,以便您可以使用'w.weight'或'w ['weight']'而不是'w [4]'。 – Barmar

+0

你是什麼意思:「或者我應該爲每個限制創建一段代碼?」 – elena

+0

大部分這是與熊貓一個襯墊 – e4c5

回答

0

您應該定義濾鏡功能:

def datafilter(fil=False, est=None, sex=None): 
    if not fil: 
     filter = lambda w: True 
    elif est: 
     if sex: 
      filter = lambda w: w[0] == 'E' and w[2] == sex 
     else: 
      filter = lambda w: w[0] == 'E' 
    else: 
     filter = lambda w: w[0] != 'E' 
    return [w[4] for q in dreal() for w in q if filter(w)] 
相關問題