在Python中求列表的元素总和并找出最大值

1 投票
3 回答
2918 浏览
提问于 2025-04-17 04:29

我不知道该怎么做:

我有一个包含多个列表的列表,定义如下:

list=[[day,type,expense],[...]];

其中,day 和 expense 是整数(int),而 type 是字符串(string)。

我需要找出每天的最高花费。举个例子:

list=[[1,'food',15],[4,'rent', 50],[1,'other',60],[8,'bills',40]]

我需要把同一天的花费加起来,然后找出花费最高的那一天。

结果应该是:

day:1, total expenses:75

3 个回答

2

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会进行下一步。

比如说,你可能想要在用户输入一个数字后,程序才开始计算。这个时候,你就需要用到“条件语句”。条件语句就像是一个检查点,程序会在这里停下来,看看条件是否成立。如果成立,程序就会继续执行;如果不成立,程序可能会给出提示,或者直接结束。

总之,条件语句帮助我们控制程序的执行流程,让程序能够根据不同的情况做出不同的反应。

data=[[1,'food',15],[4,'rent', 50],[1,'other',60],[8,'bills',40]]

# put same days together
data.sort()


# aggregate the days
from itertools import groupby
from operator import itemgetter

grouped = groupby(data, key=itemgetter(0))


# sum values by day
summed = ((day, sum(val for (_,_,val) in day_group))
          for day, day_group in grouped)


# get the max
print max(summed, key=itemgetter(1))
5

难道使用defaultdict不是一样简单吗?

import pprint
from collections import defaultdict
from operator import itemgetter

l = [[1, 'food', 15], [4, 'rent', 50], [1, 'other', 60], [8, 'bills', 40]]
d = defaultdict(int)
for item in l:
    d[item[0]] += item[2]
pprint.pprint(dict(d))
print max(d.iteritems(), key=itemgetter(1))

结果:

{1: 75, 4: 50, 8: 40}
(1, 75)
0
list = [[1, 'food', 15], [4,'rent', 50], [1, 'other', 60], [8, 'bills', 40]]
hash = {}
for item in list:
    if item[0] not in hash.keys():
        hash[item[0]] = item[2]
    else:
        hash[item[0]] += item[2]

for (k, v) in hash:
    # print key: value
for (k, v) in hash:
    if (v == max(hash.values()):
        #print k: v

或者如果你只想知道最贵的一天。

撰写回答