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

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

ただいまの
回答率

90.75%

  • Python 3.x

    5327questions

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

Python3 二重リスト 共通要素のリスト作成

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 185

N行与えられた整数がある

それぞれ3つの整数が空白区切りで与えられる

左から x y z とする

x,y は、 x 時 y 分 を示す

z は 歩いた歩数を示す

与えられたデータから、時間ごとにあるいた歩数の総数を求めたい。

入力例1
5

3 20 70
3 40 170
3 59 90
4 5 55
4 25 40

出力例1
330 95

入力例2

10

1 10 1
1 20 1
1 30 1
1 40 1
1 50 1
2 10 1
2 20 2
2 30 3
2 40 4
2 50 5

出力例2
5 14

解釈)

データの時間が共通している部分ごとに新しいリストを作りたい

data[0][0] == data[1][0] の条件に一致しているが同じ時間帯になる

以下のコードだとエラーになってしまう。

ヒントなどあれば教えて頂きたいです。

コード

M = int(input())
N = int(input())

data = [list(map(int,input().split())) for _  in range(N)]

for x in range(N):
    if data[x][0] == data[x+1][0]:
        print("OK")


出力

Traceback (most recent call last):
  File "Main.py", line 18, in <module>
    if data[x][0] == data[x+1][0]:
IndexError: list index out of range
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 4

checkベストアンサー

+2

ヒントだけ。
groupbyのkeyを指定すればできそうです。

10.1. itertools — 効率的なループ実行のためのイテレータ生成関数 — Python 3.6.5 ドキュメント

 ついでに

この処理ですが、

for x in range(N):
    if data[x][0] == data[x+1][0]:
        print("OK")


x+1するとリストのインデックスの上限をはみ出してしまうのは当然です。
安直な対処法ですが、range(N-1)にするととりあえず落ちなくはなります。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/20 13:52

    便利な機能ですね!
    すごく勉強になりました。
    ご指導ありがとうございました。

    キャンセル

+1

素朴に。

from io import StringIO
import sys

s = '''10
1 10 1
1 20 1
1 30 1
1 40 1
1 50 1
2 10 1
2 20 2
2 30 3
2 40 4
2 50 5'''

a = StringIO(s)

def input():
    return next(a)

#------------------------------------------------

N = int(input())
data = [[int(v) for v in input().split()] for _  in range(N)]

x, y, z = data[0]
p = x
r = z
ans = []
for x, y, z in data[1:]:
    if x == p:
        r += z
    else:
        ans.append(r)
        p = x
        r = z
ans.append(r)

print(*ans)

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/20 13:53

    簡潔で分かりやすいですね!
    すごく勉強になりました。
    ご指導ありがとうございました。

    キャンセル

+1

dataをpandasのDataFrameに変換して時間をキーに集計するメソッドを使うというのはいかがでしょうか。

# dataを生成するまでは省略
import pandas as pd
df_data=pd.DataFrame(data,columns=['HH','MM','num'])
result=df_data.groupby('HH').sum()['num']


これだと、「時間ごとの歩数の合計」をそのままコードにできます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

hayataka2049さんヒントのgroupbyを用いた方法です。

from itertools import groupby
data = [
    [3, 20, 70],
    [3, 40, 170],
    [3, 59, 90],
    [4, 5,  55],
    [4, 25, 40]
] # 時でソートされていること。
result = []
for hour, data_walk in groupby(data, key=lambda x: x[0]):
    walk_per_hour = sum(x[2] for x in list(data_walk))
    result.append(walk_per_hour)
print(result)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/20 13:51

    便利な機能ですね!
    スマートなコードで助かりました。
    ご指導ありがとうございました。

    キャンセル

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

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

関連した質問

  • 解決済

    Python入力

    Python3での入力についての質問です。 もっとスマートな書き方を教えてほしいです。 a = int(input()) b = int(input()) c = int(in

  • 解決済

    C言語2次元配列で関数を使用せずにビンゴゲーム作成したい

    C言語2次元配列で関数を使用せずにビンゴゲーム作成したいです。 3行*3列の簡単なものですが、素人でもわかるように ご教示お願いします。 入力は1,3,6,8,7,9,2

  • 受付中

    ターミナルで実行するのに時間がかかりすぎる

    ターミナルで実行するのに時間がかかりすぎます。 画像圧縮のアルゴリズムを書いています。 N × N ピクセルのグレースケール画像があり各ピクセルの画素値は 0 から 255

  • 解決済

    pythonで標準入力系で分からない事があります

    入力例1で言うとprint(c_1)とすると1  6 となるようにしたい更にprint(c_1[1])とすると 1 となるようにしたい 入力例1 2 20 5 10 45 6

  • 解決済

    pythonで連続出力

    ループ処理でリストから一つずつ取り出して、それを変換したものを、 一行に2個、半角スペースで区切って表示したいのですが、どうしたら良いでしょうか。 入力サンプル 3 2 46 

  • 解決済

    Python3 リスト 複数行 複数項 要素の抽出

    質問 複数行あるリストの中身を抽出し、数の比較をしたい リストの項数も複数あるため、要素の抽出方法がわからない 問題 リストの中身の数が、10以上なら5、9以下なら0を表示

  • 解決済

    Python3 リストのから一致する数字の項数を削除する方法

    問題) 部屋の全体のリストからアンラッキーナンバーを含む数だけ除き、その他を表示する方法 疑問点) アンラッキーナンバーを含む部屋の場合は NO それ以外は YES と出力しま

  • 解決済

    Python3 指示通り計算できるプログラム 条件分岐

    目標) ボードゲームをつくりたい 二人用のゲームで、財産 0 からスタートとして、ゴール時点の財産を比較する それぞれプレイヤー1、2と呼び、彼らの財産にコンピュータの指示通りに

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

  • Python 3.x

    5327questions

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