Python:计数父母列表中的项目数



假设我有以下列表:

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

我想计算每年相关的名称数量。因此,对于上面的示例,我将获得2016年的2个名称和2017年的3个名称。

for yr_index in range(len(names)):
    print yrs[yr_index], '-->', names[yr_index]
# 2016 --> [['John', 'Mike']]
# 2017 --> [['Sara'], ['Steph', 'James']]

我想您想使用zip函数,例如

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

现在,您可以在此循环中再次扎根:

>>> 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']

另外(我认为在我看来不那么清楚),使用enumerate(我将内部循环作为练习):

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

您可能知道len(my_list)给出了列表中的项目数。您可以将上面的循环计数器使用以上来计算每年的名称数量。另外,将外循环与发电机理解和sum功能相结合,以获取列表列表中的项目数:

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

您可以获得每年的名称数,或者每年与每年相关的名称的平面列表如下:

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]

此打印:

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

假设您想要它在数据结构中,而不仅仅是打印:

outcome = {}
for year_index, year in enumerate(yrs):
    outcome[str(year)] = names[year_index]
print(outcome)
# {'2017': [['Sara'], ['Steph', 'James']], '2016': [['John', 'Mike']]}

否则:

for year_index, year in enumerate(yrs):
    print('{0} --> {1}'.format(str(year), names[year_index]))
# 2016 --> [['John', 'Mike']]
# 2017 --> [['Sara'], ['Steph', 'James']]

如果您每年都在寻找数字,这将有效:

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

简短而简单。

最新更新