2017-03-10 10 views
-2

のは、私は次のリストを持っているとしましょう:の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']] 
+0

もっと詳しく教えてください。あなたが親リストの中にあるアイテムの数を数えることによって何を意味しているのか分かりません。あなたは 'yrs'の長さを知りたいですか? –

答えて

0

あなたは各年の名前の数、または次のように各年に関連付けられた名前のフラットなリストを取得することができます。

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

は、私はあなたが、例えばzip機能でプレーしたいと思います今

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

あなたはこのループに固執して、再度zip圧縮することができます

>>> 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 
0

あなたがデータ構造にだけでなく、印刷にそれをしたいと仮定:

それ以外の場合は
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']] 
0

、これは動作します:

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

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

ショートとシンプル。

関連する問題