创造净现金

2024-04-25 19:52:07 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在计算现金流时遇到了一些问题,如果在同一时间段有两个现金流,我试图创建一个净现金流。在

基本上,我想从这个开始:

time=[1,2,3,3]
cf=[100,500,1000,-500]

收件人:

^{pr2}$

任何建议都会很有帮助,因为我对python非常陌生。 谢谢。在


Tags: time建议收件人cf时间段现金流pr2陌生
3条回答

使用collections.Counter

>>> from collections import Counter
>>> tm = [1,2,3,3]
>>> cf = [100,500,1000,-500]
>>> c = Counter()
>>> for t, ca in zip(tm, cf):
...     c[t] += ca
...     
>>> c
Counter({2: 500, 3: 500, 1: 100})

使用sorted并在c.iteritems上解压缩以获得预期的输出:

^{pr2}$

如果tm列表总是排序的,那么您也可以使用itertools.groupby

^{3}$

time是一个内置模块,不要将其用作变量名。

这不是我最棒的作品,但它符合你的需要。在

time=[1,2,3,3]
cf=[100,500,1000,-500]
transactions = zip(time, cf)
cf = list(set(sf))
cf.sort()

final_cf = []
for time in cf:
    total_period = 0
    for element in transactions:
        if element[0] == time:
            total_period += element[1]
    final_cf.append(total_period)

另一种方法是使用dict:

^{pr2}$

在这两种情况下,我只使用python中的“基本”数据结构。我用一个集合来消除重复的时间,然后把它列成一个有序的列表。然后一个迭代来收集每个时间段内发生的所有事务。在

from collections import defaultdict

time=[1,2,3,3] 
cf=[100,500,1000,-500]

result = defaultdict(int)

for num,i in enumerate(time):
    result[i] += cf[num]   

time2 = list(result.keys())
cf2 = list(result.values())

相关问题 更多 >