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

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

ただいまの
回答率

90.60%

  • Python

    7493questions

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

  • Python 3.x

    5900questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 161

harunouta

score 82

 前提・実現したいこと

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

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

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

month_dataをprintした結果

>>month_data
[('かき', -0.903954802259887, 5.815279361459521), 
('りんご', -3.081510934393638, 2.4615384615384617), 
('みかん', -0.39603960396039606, 0.0)]

 該当のソースコード

fruits = [ 
    "かき",
    "りんご",
    "みかん"
]

index = {
    "2017": {
        "1月": [901, 997, 1003],
        "2月": [918, 984, 1005],
        "3月": [891, 985, 1007]
    },
    "2018": {
        "1月": [885, 1006, 1010],
        "2月": [877, 975, 1006],
        "3月": [928, 999, 1006]
    }
}

def month_change(m1, m2, m3):

    month_status = [0]*len(fruits)
    for idx_cat,cat in enumerate(fruits): #要素のインデックスと要素を同時に取り出す
        print(idx_cat,cat)
        month_status[idx_cat] = (cat, 100*(m2[idx_cat] - m1[idx_cat])/m1[idx_cat],
                100*(m3[idx_cat] - m2[idx_cat])/m2[idx_cat])

    return month_status

month_data = month_change(index['2018']['1月'], 
        index['2018']['2月'],
        index['2018']['3月'])

試したこと

年ごとの比較も加えて、tuple()関数を使ってみましたが、実行結果がどちらもリストで返されてしまいました。

fruits = [ #foodptice category
    "かき",
    "りんご",
    "みかん"
]

index = {
    "2017": {
        "1月": [901, 997, 1003],
        "2月": [918, 984, 1005],
        "3月": [891, 985, 1007]
    },
    "2018": {
        "1月": [885, 1006, 1010],
        "2月": [877, 975, 1006],
        "3月": [928, 999, 1006]
    }
}

def month_change(m1, m2, m3):

    month_status = [0]*len(fruits)
    for idx_cat,cat in enumerate(fruits): 
        print(idx_cat,cat)
        month_status[idx_cat] = (cat, 100*(m2[idx_cat] - m1[idx_cat])/m1[idx_cat],
                100*(m3[idx_cat] - m2[idx_cat])/m2[idx_cat])

    return month_status

month_data = month_change(index['2018']['1月'], 
        index['2018']['2月'],
        index['2018']['3月'])

def year_change(y1, y2):
    months = ['1月', '2月', '3月']
    year_status = [0]*len(fruits)
    for idx_cat,cat in enumerate(fruits):
        year_furuits = [cat] + [0]*len(months)
        for idx_month,month in enumerate(months):
            print(idx_cat, cat, idx_month, month)
            year_furuits[idx_month+1] = 100*(y2[month][idx_cat]
                    - y1[month][idx_cat])/y1[month][idx_cat]

        year_status[idx_cat] = tuple(year_furuits)

    return year_status

year_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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • harunouta

    2018/04/20 17:25

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

    キャンセル

  • LouiS0616

    2018/04/20 17:27

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

    キャンセル

  • fuzzball

    2018/04/20 17:27

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

    キャンセル

回答 1

checkベストアンサー

+1

妄想回答。

 #1

return tuple(month_status)

 #2

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/21 10:38

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

    キャンセル

  • 2018/04/21 12:53

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

    キャンセル

  • 2018/04/21 12:57

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

    キャンセル

  • 2018/04/21 14:03

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

    キャンセル

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

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    7493questions

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

  • Python 3.x

    5900questions

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