在python中定义带有列表的函数

时间:2016-03-18 17:11:19

标签: python list python-2.7

我想编写一个能够获取任何列表的函数,并将其返回给" 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

3 个答案:

答案 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函数将它们全部添加。