我想编写一个能够获取任何列表的函数,并将其返回给" sum"回答。现在我正在为#34; recherche"做这件事。但关键是要对列表中的任何类型执行此操作。这就是我的代码的样子。
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
答案 0 :(得分: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
答案 1 :(得分:0)
或使用groupby
中的itertools
:
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]
答案 2 :(得分: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
函数将它们全部添加。