質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

306閲覧

Pythonでリストで返される返り値をタプルのみに変更する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/04/20 07:54

編集2018/04/20 08:19

前提・実現したいこと

月ごとの果物の収穫高を比較するプログラムを書いています。
実現したいことは現在、リストで返されている値をタプルで返すことです。

発生している問題・エラーメッセージ

現在は以下のようにリストの中にタプルが入った状態で返り値が返されています。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/04/20 08:01

具体的には、month_dataをどのような形式にしたいのでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/20 08:21

ご質問ありがとうございます。現状ではリスト型だと思うのですが、どうすればタプル型にできるか知りたいです。
fuzzball

2018/04/20 08:21

return tuple(month_status) ということではないですよね?
LouiS0616

2018/04/20 08:22

二重のタプルとして受け取りたいということですか?
退会済みユーザー

退会済みユーザー

2018/04/20 08:25

return tuple(month_status)がどのような挙動になるか確認させていただきますが、一重のタプルはこの場合はできないでしょうか。
LouiS0616

2018/04/20 08:27

('かき', -0.903954802259887, 5.815279361459521, 'りんご', -3.081510934393638, 2.4615384615384617, 'みかん', -0.39603960396039606, 0.0) ってことでしょうか?
fuzzball

2018/04/20 08:27

('かき', -0.903954802259887, 5.815279361459521, 'りんご', -3.081510934393638, 2.4615384615384617, 'みかん', -0.39603960396039606, 0.0) ってことですか?
guest

回答1

0

ベストアンサー

妄想回答。

#1

python

1return tuple(month_status)

#2

python

1m1, m2, m3 = month_change(index['2018']['1月'], index['2018']['2月'], index['2018']['3月']) 2print(m1, m2, m3)

投稿2018/04/20 08:26

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/21 01:38

ご回答いただきましてありがとうございます。#1と#2のどちらも実行させていただきましたところ、 (('かき', -0.903954802259887, 5.815279361459521), ('りんご', -3.081510934393638, 2.4615384615384617), ('みかん', -0.39603960396039606, 0.0)) と二重のタプルが表示されました。 https://qiita.com/7of9/items/e81987c634aabec24d5c を参考に一重のタプルが必要な場合は実装してみます。
fuzzball

2018/04/21 03:53

#2は二重じゃないですよ。m1,m2,m3にそれぞれタプルが入っています。 あと、ベストアンサーじゃないのにベストアンサーを付けないで下さい。
退会済みユーザー

退会済みユーザー

2018/04/21 03:57

お返事いただきましてありがとうございます。質問が曖昧でこちらも十分に理解できていなかったため、fuzzballさんの回答で理解ができたので、ベストアンサーをつけさせていただきました。
fuzzball

2018/04/21 05:03

もし自分で解決できたのであれば、それを回答として書き、自己解決でcloseして下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問