2017-03-10 2 views
-2

Lassen Sie uns sagen, ich habe folgende Listen:Python: count Anzahl der Elemente innerhalb geordneten Liste

yrs = [2016, 2017] 
months = [['June'], ['January', 'February']] 
names = [[['John', 'Mike']], [['Sara'], ['Steph', 'James']]] 

Ich möchte die Anzahl der Namen, die mit jedem Jahr assoziiert zählen. Also für das obige Beispiel würde ich 2 Namen für 2016 und 3 Namen für 2017 bekommen. Ich denke also, ich brauche eine Möglichkeit, die Listen zu verflachen, wenn ich jedes Jahr iteriere.

for yr_index in range(len(names)): 
    print yrs[yr_index], '-->', names[yr_index] 

# 2016 --> [['John', 'Mike']] 
# 2017 --> [['Sara'], ['Steph', 'James']] 
+0

Könnten Sie mehr pls erarbeiten? Ich bin mir nicht sicher, ob ich verstanden habe, was du meinst, indem du die Anzahl der Gegenstände in der Elternliste festlegst. Sie wollen wissen, was die Länge von 'yrs' ist? –

Antwort

0

Sie die Anzahl der Namen für jedes Jahr erhalten können, oder die flachen Liste von Namen, die mit jedem Jahr wie folgt zugeordnet:

yrs = [2016, 2017] 
months = [['June'], ['January', 'February']] 
names = [[['John', 'Mike']], [['Sara'], ['Steph', 'James']]] 

for yr_index in range(len(names)): 
    # print the number of names for each year 
    print yrs[yr_index], '-->', len([item for sublist in names[yr_index] for item in sublist]) 

    # print the names for each year 
    print yrs[yr_index], '-->', [item for sublist in names[yr_index] for item in sublist] 

Diese Drucke:

2016 --> 2 
2016 --> ['John', 'Mike'] 
2017 --> 3 
2017 --> ['Sara', 'Steph', 'James'] 
1

Ich glaube, Sie mit der zip Funktion spielen möchten z.B.

>>> list(zip(yrs, months, names)) 
[(2016, ['June'], [['John', 'Mike']]), (2017, ['January', 'February'], [['Sara'], ['Steph', 'James']])] 

Jetzt können Sie in dieser einer Schleife stecken und Reißverschluss wieder:

>>> for yr, yr_months, yr_names in zip(yrs, months, names): 
...  for month, month_names in zip(yr_months, yr_names): 
...   print(yr, month, month_names) 
... 
2016 June ['John', 'Mike'] 
2017 January ['Sara'] 
2017 February ['Steph', 'James'] 

Alternativ (aber nicht so klar, meiner Meinung nach), verwenden enumerate (Ich werde die innere Schleife als eine Übung verlassen):

>>> for yr_index, yr in enumerate(yrs): 
...  print(yr, months[yr_index]) 
... 
2016 ['June'] 
2017 ['January', 'February'] 

Du bist wahrscheinlich bewusst, dass len(my_list) die Anzahl der Elemente in einer Liste gibt. Sie können das Obige mit einem Schleifenzähler verwenden, um die Anzahl der Namen in jedem Jahr zu zählen. Alternativ verbinden die äußere Schleife mit einem Generator Verständnis und die sum Funktion die Anzahl der Elemente in einer Liste von Listen zu bekommen:

>>> x = [[1,2], [3, 4]] 
>>> sum(len(sub_list) for sub_list in x) 
4 
0

Vorausgesetzt, dass Sie es in einer Datenstruktur wollen und nicht nur auf Druck:

outcome = {} 

for year_index, year in enumerate(yrs): 
    outcome[str(year)] = names[year_index] 

print(outcome) 

# {'2017': [['Sara'], ['Steph', 'James']], '2016': [['John', 'Mike']]} 

Ansonsten:

for year_index, year in enumerate(yrs): 
    print('{0} --> {1}'.format(str(year), names[year_index])) 

# 2016 --> [['John', 'Mike']] 
# 2017 --> [['Sara'], ['Steph', 'James']] 
0

Wenn Sie sich für die Zahl in jedem Jahr sucht, wird diese Arbeit:

result = {} 
for index, year in enumerate(yrs): 
    result[year] = sum([len(sublist) for sublist in names[index]]) 

>>> result 
{2016: 2, 2017: 3} 

kurz und einfach.

Verwandte Themen