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

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

ただいまの
回答率

90.50%

  • Python 3.x

    6405questions

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

リスト 異なる要素の集計

解決済

回答 1

投稿 編集

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

Sample_Test

score 138

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

 ルール1

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

 ルール2

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

l = [[0 for i in range(5)] for j in range(5)]


# サンプル値を代入
l[0][0]='C3'
l[1][0]='C3'
l[2][0]='C3'


l[0][2]='A1'

l[1][1]='A2'
l[1][2]='A2'

l[0][1]='B1'

from pprint import pprint
pprint(l)


# 完成するデータ
l=[['C3', 'B1', 'A1', 0, 0],
 ['C3', 'A2', 'A2', 0, 0],
 ['C3', 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]]

 求める結果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]]

"""

追記 コード

# 完成するデータ
l=[
 [3, 1, 1, 0, 0],
 [3, 2, 2, 0, 0],
 [3, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]
 ]


import numpy as np

T=np.array(l)
print(T)

print(T.sum(axis=0))
print(T.sum(axis=1))


# 完成するデータ
"""
[[3 1 1 0 0]
 [3 2 2 0 0]
 [3 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]
[9 3 3 0 0]
[5 7 3 0 0]
"""

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • coco_bauer

    2018/06/28 10:21

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

    キャンセル

回答 1

checkベストアンサー

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]
"""

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

追記を受けて

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

class Elem:
    def __init__(self, chr, num=None):
        if num is not None:
            self._chr = chr
            self._num = num
            return

        if chr in [0, '0']:
            self._chr = None
            self._num = 0
            return

        if isinstance(chr, str):
            self._chr = chr[0]
            self._num = int(chr[1:])
            return

        raise ValueError

    def is_zero(self):
        return self._chr is None

    def __add__(self, other):
        if self.is_zero():
            return other

        if other.is_zero():
            return self

        if self._chr == other._chr:
            return Elem(
                self._chr,
                self._num + other._num
            )

        return Elem(
            self._chr if self._num > other._num else other._chr,
            abs(self._num - other._num)
        )

    def __repr__(self):
        if self._chr is None:
            return '0'

        return f'{self._chr}{self._num}'


print(
    Elem('A3') + Elem('B2')
)

実行結果 Wandbox

A1

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • Python 3.x

    6405questions

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