前提・実現したいこと
月ごとの果物の収穫高を比較するプログラムを書いています。
実現したいことは現在、リストで返されている値をタプルで返すことです。
発生している問題・エラーメッセージ
現在は以下のようにリストの中にタプルが入った状態で返り値が返されています。
month_dataをprintした結果
>>month_data [('かき', -0.903954802259887, 5.815279361459521), ('りんご', -3.081510934393638, 2.4615384615384617), ('みかん', -0.39603960396039606, 0.0)]
該当のソースコード
python
1fruits = [ 2 "かき", 3 "りんご", 4 "みかん" 5] 6 7index = { 8 "2017": { 9 "1月": [901, 997, 1003], 10 "2月": [918, 984, 1005], 11 "3月": [891, 985, 1007] 12 }, 13 "2018": { 14 "1月": [885, 1006, 1010], 15 "2月": [877, 975, 1006], 16 "3月": [928, 999, 1006] 17 } 18} 19 20def month_change(m1, m2, m3): 21 22 month_status = [0]*len(fruits) 23 for idx_cat,cat in enumerate(fruits): #要素のインデックスと要素を同時に取り出す 24 print(idx_cat,cat) 25 month_status[idx_cat] = (cat, 100*(m2[idx_cat] - m1[idx_cat])/m1[idx_cat], 26 100*(m3[idx_cat] - m2[idx_cat])/m2[idx_cat]) 27 28 return month_status 29 30month_data = month_change(index['2018']['1月'], 31 index['2018']['2月'], 32 index['2018']['3月']) 33
###試したこと
年ごとの比較も加えて、tuple()関数を使ってみましたが、実行結果がどちらもリストで返されてしまいました。
python
1fruits = [ #foodptice category 2 "かき", 3 "りんご", 4 "みかん" 5] 6 7index = { 8 "2017": { 9 "1月": [901, 997, 1003], 10 "2月": [918, 984, 1005], 11 "3月": [891, 985, 1007] 12 }, 13 "2018": { 14 "1月": [885, 1006, 1010], 15 "2月": [877, 975, 1006], 16 "3月": [928, 999, 1006] 17 } 18} 19 20def month_change(m1, m2, m3): 21 22 month_status = [0]*len(fruits) 23 for idx_cat,cat in enumerate(fruits): 24 print(idx_cat,cat) 25 month_status[idx_cat] = (cat, 100*(m2[idx_cat] - m1[idx_cat])/m1[idx_cat], 26 100*(m3[idx_cat] - m2[idx_cat])/m2[idx_cat]) 27 28 return month_status 29 30month_data = month_change(index['2018']['1月'], 31 index['2018']['2月'], 32 index['2018']['3月']) 33 34def year_change(y1, y2): 35 months = ['1月', '2月', '3月'] 36 year_status = [0]*len(fruits) 37 for idx_cat,cat in enumerate(fruits): 38 year_furuits = [cat] + [0]*len(months) 39 for idx_month,month in enumerate(months): 40 print(idx_cat, cat, idx_month, month) 41 year_furuits[idx_month+1] = 100*(y2[month][idx_cat] 42 - y1[month][idx_cat])/y1[month][idx_cat] 43 44 year_status[idx_cat] = tuple(year_furuits) 45 46 return year_status 47 48year_data = year_change(index['2017'],index['2018'])
実行結果
>>> year_data [('かき', -1.7758046614872365, -4.466230936819172, 4.1526374859708195), ('りんご', 0.9027081243731193, -0.9146341463414634, 1.4213197969543148), ('みかん', 0.6979062811565304, 0.09950248756218906, -0.09930486593843098)] >>> month_data [('かき', -0.903954802259887, 5.815279361459521), ('りんご', -3.081510934393638, 2.4615384615384617), ('みかん', -0.39603960396039606, 0.0)]
補足情報(FW/ツールのバージョンなど)
Python 3.6.3
具体的には、month_dataをどのような形式にしたいのでしょうか?

ご質問ありがとうございます。現状ではリスト型だと思うのですが、どうすればタプル型にできるか知りたいです。
return tuple(month_status) ということではないですよね?
二重のタプルとして受け取りたいということですか?

return tuple(month_status)がどのような挙動になるか確認させていただきますが、一重のタプルはこの場合はできないでしょうか。
('かき', -0.903954802259887, 5.815279361459521, 'りんご', -3.081510934393638, 2.4615384615384617, 'みかん', -0.39603960396039606, 0.0) ってことでしょうか?
('かき', -0.903954802259887, 5.815279361459521, 'りんご', -3.081510934393638, 2.4615384615384617, 'みかん', -0.39603960396039606, 0.0) ってことですか?

回答1件
あなたの回答
tips
プレビュー