2017-02-18 4 views
0

Gegeben zwei Listen hat:Finden Sie das Jahr, die höchste Anzahl von aktiven Bindungen

  1. Ausgabe Jahr von Anleihen
  2. Fälligkeitsjahr Bindung

Etwas wie:

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

Bei diesem Beispiel hat die erste Anleihe das Emissionsjahr 1934 und das Fälligkeitsjahr 1967, während die zweite Anleihe das Emissionsjahr 1932 hat und Fälligkeitsjahr von 1937 und so weiter.

Das Problem, das ich versuche zu lösen, ist das Jahr zu finden, das die höchste Anzahl aktiver Bindungen hat.

Hier ist was ich bisher habe. Dies ist das Jahr, in dem alle Anleihen aktiv sind.

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 

Hier tempnew ist der Schnittpunkt aller aktiven Jahren für alle Anleihen. Es kann jedoch vorkommen, dass die Schnittmenge aller aktiven Jahre leer ist. Zum Beispiel, wenn Bond 1 von 1932 bis 1945 aktiv war und Bond 2 von 1947 bis 1960 aktiv war.

Kann jemand helfen?

+2

Was hast du bisher versucht? –

+0

@Kahirul Danke für die Antwort. Hier ist mein Code, der für alle Anleihen den Schnittpunkt aller aktiven Jahre bildet. "L1 = [1936,1934,1937] L2 = [1940,1938,1940] ctr = 0 für i im Bereich (len (L1)): j = i L3 = Liste (Bereich (L1 [i ], L2 [j])) #print L3 wenn ctr == 0: tempnew = L3 anderes: tempnew = list (set (L3) & set (tempnew)) # temp = tempnew ctr = ctr + 1 ' – jayant

Antwort

0

Hier ist ein Code, der Ihrer Meinung nach Ihren Anforderungen entspricht. Es funktioniert durch Scannen issue und mature Jahre Liste mit zip. Es füllt dann ein Diktat aus, dessen Schlüssel alle aktiven Jahre sind und deren Wert die Anzahl der in diesem Jahr aktiven Anleihen ist. Schließlich gibt sie all die Jahre, die die maximale Anzahl der aktiven Bindungen haben:

Code:

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())]) 

Beispieldaten:

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

Ergebnisse:

[1937, 1938] 
+0

danke für Hilfe. – jayant

+0

Sie sind sehr Willkommen. Bei SO ist jedoch der beste Weg, um Danke zu sagen, eine * Antwort * (oder eine Frage) zu verbessern, die Sie nützlich finden. Dies gilt auch für Fragen, die Sie nicht gestellt haben. Prost. –

Verwandte Themen