2016-03-18 26 views
-3

我想編寫一個函數,該函數將採用任何列表並將該「回覆」答案給我。現在我正在爲「recherche」做這件事,但重點是在列表中的任何類型。這就是我的代碼的樣子。在python中定義一個帶有列表的函數

TYPE_RECHERCHE = "recherche" 

une_formation = [ 
    [ TYPE_DIRIGEE, 7.50 ], 
    [ TYPE_PRESENTATION, 4.5 ], 
    [ TYPE_DIRIGEE, 2.00 ], 
    [ TYPE_CONFERENCE, 7.0 ], 
    [ TYPE_ATELIER, 2.25 ], 
    [ TYPE_GROUPE_DISCUSSION, 3.00 ], 
    [ TYPE_RECHERCHE, 1 ], 
    [ TYPE_LECTURE, 4.0 ], 
    [ TYPE_RECHERCHE, 4 ], 
    [ TYPE_RECHERCHE, 2.5 ], 
    [ TYPE_PRESENTATION, 3.5 ], 
    [ TYPE_REDACTION, 5.5 ], 
    [ TYPE_LECTURE, 10.0 ] 
] 


temps_formation_recherche = [] 
a = -1 
while a < 12: 
    a = a + 1 
    if une_formation[a][0] == "recherche": 
     temps_formation_recherche.append(une_formation[a][1]) 

sum(temps_formation_recherche) # this will return 7.5 
+1

問題是什麼?你最終的目標是什麼? – Goodies

+0

你看,代碼部分後a = -1 ....... – cartoon197

+0

它是做錯了什麼? – zondo

回答

4

這是一個有點難以準確地瞭解你以後,但試試這個:

def mon_fonction(une_formation, TYPE_RECHERCHE): 
    tot = 0 
    liste = [] 
    for quel, val in une_formation: 
     if quel == TYPE_RECHERCHE: 
      tot += val 
      liste.append(val) 
    print "Les vals sont:", liste 
    print "en tout:", tot 
    return tot 
+0

我會盡力與此謝謝 – cartoon197

+0

這一個工作完全再次感謝你 – cartoon197

0

或者用groupbyitertools

from itertools import groupby 

def sum_by_type(une_formation, TYPE_String): 
    return [sum(i[1] for i in group) for key, group in groupby(sorted(une_formation, key = lambda i: i[0]), lambda i: i[0]) if key == TYPE_String ][0] 
+0

感謝您的信息,即時瞭解蟒蛇的基本,我認爲這是太現在爲我提前,但非常感謝您的幫助 – cartoon197

0

您可以定義功能這樣它就會把你想要找的東西當作參數。然後,您可以將每個找到的項目的值添加到一個臨時變量 - 看起來您幾乎已經在您的臨時列表中。 如:

def find_total(toFind): 
    temps_formation_recherche = 0 
    a = -1 
    while a < 12: 
     a += 1 
     if une_formation[a][0] == toFind: 
      temps_formation_recherche += une_formation[a][1] 

    return temps_formation_recherche 

這在TYPE_RECHERCHE的情況下將返回7.5。在TYPE_DIRIGEE的情況下,返回9.5


您還可以通過使用列表理解優化代碼:

def find_total(toFind): 
    return sum([x[1] for x in une_formation if x[0] == toFind]) 

print(find_total(TYPE_RECHERCHE)) # prints 7.5 
print(find_total(TYPE_DIRIGEE)) # prints 9.5 

這將需要原始列表,創建只包含每一個匹配元素的數量部分的列表,然後使用sum功能將它們全部添加。

+0

非常感謝您的幫助,我明白這一點。 – cartoon197

+0

我嘗試這一個,它的劑量工作 – cartoon197

相關問題