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

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

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

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

Q&A

解決済

2回答

1323閲覧

python 多重リストの重複要素の整理について

Platycerium

総合スコア34

Python 3.x

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

0グッド

0クリップ

投稿2020/07/03 10:10

編集2020/07/03 12:30

pythonの多重リストで処理の仕方がわからなくて困っています。

多重リストの2つめをキーとして、リスト内に同じものがあれば3つめの要素を足し算をしたいです。

listcode=[['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4']]

書き出したい出力結果
[['A', 'ABC', '4'], ['B', 'DEF', '2'], ['D', 'XYZ', '4']]
可能であれば以下の出力結果も欲しい
[['A+C', 'ABC', '4'], ['B', 'DEF', '2'], ['D', 'XYZ', '4']]

自分なりにコードを書いてみましたが、うまく動作しません。どのようなコードにしたら実現できるのでしょうか?

listcode=[['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4']] y=1 for i in range(0,len(listcode)): if y==len(listcode): pass else: for x in range(1,len(listcode)-1): if listcode[i][1]==listcode[x][1]: listcode[i][2]=int(listcode[i][2])+int(listcode[x][2]) del listcode[x] x=x-1 y=y+1 print(listcode)

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

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

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

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

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

guest

回答2

0

自己解決

以下の方法でうまく動かすことができました。

listcode=[['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4'],['E', 'ABC', '1'], ['F', 'DEF', '2'], ['G', 'ABC', '3'], ['H', 'XYZ', '4'], ['I', 'XYZ', '4']] delete_index=[] for i in range(0,len(listcode)): for x in range(i+1,len(listcode)): if listcode[i][1]==listcode[x][1]: listcode[i][0]=str(listcode[i][0])+"+"+str(listcode[x][0]) listcode[i][2]=int(listcode[i][2])+int(listcode[x][2]) delete_index.append(x) newlistcode = [i for i in listcode if listcode.index(i) not in delete_index] print(newlistcode) #[['A+C+E+G', 'ABC', 8], ['B+F', 'DEF', 4], ['D+H+I', 'XYZ', 12]]

投稿2020/07/03 23:22

編集2020/07/03 23:32
Platycerium

総合スコア34

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

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

0

【追記】

Python

1listcode=[['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4'],['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4']] 2 3y=1 4for i in range(0,len(listcode)): 5 if y==len(listcode): 6 pass 7 else: 8 for x in range(i+1,len(listcode)): 9 if listcode[i][1]==listcode[x][1]: 10 listcode[i][2]=int(listcode[i][2])+int(listcode[x][2]) 11 del listcode[x] 12 if x == len(listcode) -1: 13 break 14 x=x-1 15 y=y+1 16 17print(listcode) 18#[['A', 'ABC', 8], ['B', 'DEF', 4], ['D', 'XYZ', 8]]

質問者さんのコードを改良しました。

Python

1listcode=[['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4']] 2 3y=1 4for i in range(0,len(listcode)): 5 if y==len(listcode): 6 pass 7 else: 8 #for x in range(1,len(listcode)-1): 9 for x in range(i+1,len(listcode)-1): 10 if listcode[i][1]==listcode[x][1]: 11 12 listcode[i][2]=int(listcode[i][2])+int(listcode[x][2]) 13 del listcode[x] 14 x=x-1 15 16 y=y+1 17 18 19print(listcode) 20#[['A', 'ABC', 4], ['B', 'DEF', '2'], ['D', 'XYZ', '4']]

投稿2020/07/03 13:08

編集2020/07/03 14:04
meg_

総合スコア10577

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

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

Platycerium

2020/07/03 13:43

回答ありがとうございました。 listcode=[['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4'],['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4']] 上記の様にリストを2倍にして実行したところエラーが出てしまいます。 おそらく最後の要素を消すことによるエラーの様な気がするのですが、エラーを出さずに実行させることは可能でしょうか?
meg_

2020/07/03 14:05

改良したコードを回答に追記しました。
Platycerium

2020/07/03 14:18

早速の回答ありがとうございます listcode=[['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4'],['A', 'ABC', '1'], ['B', 'DEF', '2'], ['C', 'ABC', '3'], ['D', 'XYZ', '4'], ['D', 'XYZ', '4']] リストを上記に変更すると何が原因かよくわかりませんが、またエラーが出てしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問