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

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

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

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

Q&A

解決済

3回答

15742閲覧

リスト内の要素の足し算について

Sh0He1

総合スコア13

Python

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

0グッド

0クリップ

投稿2018/09/19 23:15

編集2018/09/19 23:16

以下のリストにおいて、内包リストのインデックス0が同じ数字の間、インデックス1の数字を足し合わせて、新たなリストを作成したい。

python

1num_list = [[1,2],[1,5],[1,4],[2,1],[2,3],[3,6],[3,7]] 2.... 3欲しい出力 4new_list = [11,4,13]

上記の場合、左から三番目まで内包リストのインデックス0の値が1であるので、その間のインデックス1の値を足し合わせて、2 + 5 + 4 = 11 となる。そして、得られた結果を新しいリストに追加する。以降も同様に処理していく。

ご回答よろしくお願いします。

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

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

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

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

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

opyon

2018/09/19 23:48

聞き慣れない「内包リスト」というのは文脈から、ネスト=入れ子にされた2次元配列のことだと思いますが、「内包表記」と混同されていませんか?
quickquip

2018/09/19 23:49

チャレンジして失敗したコードとか、書きかけのコードとか、書きましょう。
mather

2018/09/19 23:50

丸投げの質問です。どこまでご自身で試して、何がわからないのかを質問に書いてください。
jun68ykt

2018/09/20 00:25

こんにちは。回答を書きましたが、一点、要件を確認させてください。たとえば num_list が、 [[1,2],[1,5],[1,4],[3,1],[3,3],[4,6],[4,7]] のときは、 インデクス0の数字は 1, 3, 4 となって、2 が抜けています。 確認したいのは (1)このようなインデクス0の数字に抜けがある場合もあり得ると考えたほうがよいでしょうか?(2) また、あり得る場合、この例でいうと、欲しい結果は、[11, 0, 4,13] でしょうか?または抜けている数字の合計は結果に入れず、 [11,4,13] が望ましいのでしょうか?
fuzzball

2018/09/20 01:13

インデックス0の値は昇順であることが保証されていますか?
guest

回答3

0

ベストアンサー

エレガントなコードは他の方に任せて・・・私は愚直にfor文で!
自分用の練習課題として辞書を使った例を追記

辞書を使った例

Python3

1# k=key 2# v=value 3# d=dict 4# data=[1,2] [1,5] ... 5# n=newlist 6 7k = sorted(list(dict(src).keys())) 8v = [0 for i in range(len(k))] 9d = dict(zip(k, v)) 10for data in src: 11 d[data[0]] += data[1] 12n = d.values() 13print(n)

for文

Python3

1# coding=UTF-8 2src = [[1,2],[1,5],[1,4],[2,1],[2,3],[3,6],[3,7]] 3 4x = src[0][0]##xyで比較 5s = src[0][1]##sum 6n = []##newlist 7 8for i in range(len(src)-1): 9 y = src[i+1][0] 10 if x == y: 11 s += src[i+1][1] 12 else: 13 n.append(s) 14 x = y 15 s = src[i+1][1] 16n.append(s) 17print(n)

投稿2018/09/20 00:15

編集2018/09/20 00:59
opyon

総合スコア1009

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

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

Sh0He1

2018/09/20 02:11

非常に簡潔でわかりやすいです。非常に参考になりました。ご回答ありがとうございました。
guest

0

Python

1num_list = [[1, 2], [1, 5], [1, 4], [2, 1], [2, 3], [3, 6], [3, 7]] 2 3result = [sum(d[1] for d in num_list if d[0]==i) for i in range(1,4)] 4print(result) 5#[11, 4, 13]

投稿2018/09/20 00:04

magichan

総合スコア15898

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

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

opyon

2018/09/20 00:35

エレガントにサクっと内包表記出来る方が羨ましいです。
magichan

2018/09/20 01:34

普通にfor文を使って実装できるのであれば、あとは書き方を変更するだけなので。 単に慣れの問題かと思います。
Sh0He1

2018/09/20 02:13

ご回答ありがとうございます。内包表記にするとたった1行で収まることに驚きです。
opyon

2018/09/20 02:39

@magichanさんへ なるほど!言われてみるとfor文の入れ子のように見えてきますね。 地道にfor文書いたり内包表記に書き換えたりして練習してみます。
guest

0

こんにちは。

defaultdict を使ってみました。

python

1from collections import defaultdict 2 3num_list = [[1, 2], [1, 5], [1, 4], [2, 1], [2, 3], [3, 6], [3, 7]] 4 5totals = defaultdict(int) 6 7for e in num_list: 8 totals[e[0]] += e[1] 9 10result = [total[1] for total in sorted(totals.items())] 11 12print(result)

動作確認用に、上記のコードを以下に上げておきました。

https://trinket.io/python/ad3381b5f6

参考になれば幸いです。


追記

上記の回答は、ご質問の文章とコード例

python

1num_list = [[1, 2], [1, 5], [1, 4], [2, 1], [2, 3], [3, 6], [3, 7]]

から判断して、num_list の各要素の配列について、先頭の数字は(上記の例だと、 1, 2, 3 というように、)整数として連続しており、抜けている数字はないという前提での回答になります。

投稿2018/09/19 23:48

編集2018/09/20 01:11
jun68ykt

総合スコア9058

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

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

quickquip

2018/09/19 23:53 編集

0番目の要素が歯抜け(3は表れないが4はある、とか)になる可能性が考慮されていません。
quickquip

2018/09/20 01:19

そういう規則性がありそうだ、という前提ということで了解しました。
Sh0He1

2018/09/20 02:14

丁寧でわかりやすい回答ありがとうございます。リンク参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問