找出活跃债券数量最多的年份

时间:2017-02-18 17:52:55

标签: python

给出两个清单:

  1. 债券发行年
  2. 债券到期年份
  3. 类似的东西:

    issue_year = [1934, 1932, 1945, 1946, ...]
    mature_years = [1967, 1937, 1957, 1998, ...]
    

    通过这个例子,第一个债券的发行年份为1934年,成熟年份为1967年,而第二个债券发行年份为1932年,成熟年份为1937年,依此类推。

    我想解决的问题是找到活跃债券数量最多的年份。

    这是我到目前为止所拥有的。这可以找到所有债券活跃的年份。

    L1=[1936,1934,1937]
    L2=[1940,1938,1940]
    
    ctr=0
    for i in range(len(L1)):
        j=i
        L3=list(range(L1[i],L2[j]))
        if ctr==0:
           tempnew=L3
        else:
           tempnew=list(set(L3) & set(tempnew))
    
        ctr = ctr+1 
    

    这里tempnew是所有债券的所有活跃年份的交集。但是,可能会发生所有活跃年份的交集可能是空的。例如,如果债券1从1932年到1945年有效,债券2从1947年到1960年有效。

    有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

以下是一些我认为符合您要求的代码。它的工作原理是使用issue扫描maturezip年份列表。然后填写一个字典,其密钥是所有活跃的年份,其价值是当年活跃的债券数量。最后它倾倒了所有具有最大活跃债券数量的年份:

<强>代码:

def add_active_years(years, issue, mature):
    for year in range(issue, mature+1):
        years[year] = years.get(year, 0) + 1

# go through the lists and calculate the active years
years = {}
for issue, mature in zip(L1, L2):
    add_active_years(years, issue, mature)

# now reverse the years dict into a count dict of lists of years
counts = {}
for year, count in years.items():
    counts[count] = counts.get(count, []) + [year]

# show the result
print(counts[max(counts.keys())])

示例数据:

L1 = [1936,1934,1937]
L2 = [1940,1938,1940]

<强>结果:

[1937, 1938]