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

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

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

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

Q&A

解決済

1回答

766閲覧

リスト 異なる要素の集計

Untitled_Sample

総合スコア192

Python 3.x

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

0グッド

0クリップ

投稿2018/06/28 01:14

編集2018/06/28 07:15

あるリストを特定の場所に集計したいです。
識別用のアルファベットが異なるので、どの用に考えれば良いのでしょう?
データの0が'0'だったりしますが、どちらでも構いません。

# ルール1
1.縦列に沿った要素を、要素毎に結合する
例 A1+A2=A3
2.異なる要素(大きい方から小さい要素数を引く)
例 A3-B1=A2
3.最後に残った大きい要素を先頭リストに纏める

# ルール2
1.横列に沿った要素を、要素毎に結合する。
2.異なる要素(大きい方から小さい要素数を引く)
3.最後に残った大きい要素をリストに纏める

python

1 2 3l = [[0 for i in range(5)] for j in range(5)] 4 5 6# サンプル値を代入 7l[0][0]='C3' 8l[1][0]='C3' 9l[2][0]='C3' 10 11 12l[0][2]='A1' 13 14l[1][1]='A2' 15l[1][2]='A2' 16 17l[0][1]='B1' 18 19from pprint import pprint 20pprint(l) 21 22 23# 完成するデータ 24l=[['C3', 'B1', 'A1', 0, 0], 25 ['C3', 'A2', 'A2', 0, 0], 26 ['C3', 0, 0, 0, 0], 27 [0, 0, 0, 0, 0], 28 [0, 0, 0, 0, 0]] 29

求める結果1 イメージは↑

""" [['C9', 'A1', 'A3', 0, 0], ['0', '0', '0', 0, 0], ['0', 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] """

求める結果2 イメージは→

""" [[0, 0, 0, 0, 'C1'], [0, 0, 0, 0, 'A1'], [0, 0, 0, 0, 'C3'], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] """

#追記 コード

python

1 2# 完成するデータ 3l=[ 4 [3, 1, 1, 0, 0], 5 [3, 2, 2, 0, 0], 6 [3, 0, 0, 0, 0], 7 [0, 0, 0, 0, 0], 8 [0, 0, 0, 0, 0] 9 ] 10 11 12import numpy as np 13 14T=np.array(l) 15print(T) 16 17print(T.sum(axis=0)) 18print(T.sum(axis=1)) 19 20 21# 完成するデータ 22""" 23[[3 1 1 0 0] 24 [3 2 2 0 0] 25 [3 0 0 0 0] 26 [0 0 0 0 0] 27 [0 0 0 0 0]] 28[9 3 3 0 0] 29[5 7 3 0 0] 30""" 31 32

アルファベットがつくと、どれを計算するのか
分からないです。
npでアルファベット順に集計は可能でしょうか?

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

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

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

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

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

coco_bauer

2018/06/28 01:21

「どんなルールに従って、各項目の値を求めるのか」が示されていないので、意味不明です。 ちゃんと説明するか、質問を削除するかしてください。
guest

回答1

0

ベストアンサー

どの用に考えれば良いのでしょう?

アルファベットのことは一旦忘れて、
データがただの数値だった場合のコードを組んでみると良いです。

つまり、次のような変換を担う『関数1』を書いてください。

lst = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] lst1 = [row[:] for row in lst] # lstのコピー lst1 = 関数1(lst1) print(lst1) """ [[12, 15, 18], [ 0, 0, 0], [ 0, 0, 0] """

まずこれが出来ないと、アルファベットなんてとても太刀打ちできないでしょう。

追記を受けて

例えばこんなクラスを組むと、『加算』をカスタムできます。

Python

1class Elem: 2 def __init__(self, chr, num=None): 3 if num is not None: 4 self._chr = chr 5 self._num = num 6 return 7 8 if chr in [0, '0']: 9 self._chr = None 10 self._num = 0 11 return 12 13 if isinstance(chr, str): 14 self._chr = chr[0] 15 self._num = int(chr[1:]) 16 return 17 18 raise ValueError 19 20 def is_zero(self): 21 return self._chr is None 22 23 def __add__(self, other): 24 if self.is_zero(): 25 return other 26 27 if other.is_zero(): 28 return self 29 30 if self._chr == other._chr: 31 return Elem( 32 self._chr, 33 self._num + other._num 34 ) 35 36 return Elem( 37 self._chr if self._num > other._num else other._chr, 38 abs(self._num - other._num) 39 ) 40 41 def __repr__(self): 42 if self._chr is None: 43 return '0' 44 45 return f'{self._chr}{self._num}' 46 47 48print( 49 Elem('A3') + Elem('B2') 50)

実行結果 Wandbox

plain

1A1

投稿2018/06/28 05:20

編集2018/06/28 07:25
LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問