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

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

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

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

Q&A

解決済

2回答

303閲覧

python3 リスト内で同じ要素をもつ数値の合計

Alter_9524

総合スコア22

Python 3.x

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

0グッド

0クリップ

投稿2018/10/11 02:23

編集2018/10/11 02:32

リストの操作方法で困っていることがあります。
同じ要素ごとに数値を合計したいと思っています。

[入力] 鈴木さん 2500 加藤さん 2680 武田さん 1200 武田さん 6500

上記のように標準入力から各メンバーの名前とガソリン代を受け取ってこれをメンバーごとにまとめたいと考えてます。

[期待する出力] 武田さん 7700 加藤さん 2680 鈴木さん 2500

というように2つあった武田さんのデータをまとめ、かつガソリン代を降順で並べたいと考えています。

試したこと

[コード] #メンバー数の分だけ0の入ったリストを用意 result = [0]*3 member = ["鈴木さん","加藤さん","武田さん"] # for i in range(3): #3 → メンバー数 for j in range(4): #4 → データ数 if member[i] == data[j][0]: result[i] += int(data[j][1]) print(result)
[出力] [2500,2680,7700]

上記のように数値のみをまとめたリストを作成するところまではできました。

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

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

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

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

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

mather

2018/10/11 02:27

このままでは丸投げの質問なので、まずはご自身で試してみて、具体的にどの部分の書き方がわからないのか、どの部分でエラーがでるのか、を書いてください。
guest

回答2

0

result = [0]*3
member = ["鈴木さん","加藤さん","武田さん"]

としたのでは、 名前や人数が変化したときに対応できません。
もっと汎用的にする必要があります。
data.txt

鈴木さん 2500 加藤さん 2680 武田さん 1200 武田さん 6500

a.py

python3

1import sys 2 3result = {} 4for line in sys.stdin: 5 name, val = line.split() 6 result[name] = result.get(name, 0) + int(val) 7 8for name, val in sorted(result.items(), key=lambda x: x[1], reverse=True): 9 print(name, "\t", val)

実行例
イメージ説明

(名前, val) で dict に保存するようにしていきます。
1行ずつ読み込んだら、 Space で区切って名前と値に分割します。
dict[name] に val を足し算して登録していきます。(val は integer に変換して処理)
名前が登録されていない場合は、 val の値は 0 が得られるようにしておきます。
入力が終了したら、val で降順ソートしてから、各項目を 1 行ずつ整形して print します。

投稿2018/10/12 21:50

katoy

総合スコア22324

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

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

0

ベストアンサー

標準入力から各メンバーの名前とガソリン代を受け取ってこれをメンバーごとにまとめたい

名前と金額を紐付ける辞書を用意して、一行ずつ処理していけば良いです。

ガソリン代を降順で並べたい

辞書は原則順序付けできないので、dict#items でタプルのシーケンスを取得してソートします。
わりあい良く使う処理なので、検索すればサンプルは充分得られます。


collections.defaultdictcollections.Counter を使ってみても良いでしょう。

投稿2018/10/11 02:31

編集2018/10/11 02:32
LouiS0616

総合スコア35660

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

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

Alter_9524

2018/10/11 02:51

ありがとうございます。 一旦、教えていただいたcollectionsや辞書について勉強してからこの処理に再挑戦しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問