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

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

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

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

Q&A

解決済

4回答

325閲覧

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

python3_beginer

総合スコア46

Python 3.x

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

0グッド

1クリップ

投稿2018/04/19 13:32

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

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

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

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

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

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

guest

回答4

0

ベストアンサー

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

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

ついでに

この処理ですが、

python

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

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

投稿2018/04/19 13:39

編集2018/04/19 13:46
hayataka2049

総合スコア30933

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

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

python3_beginer

2018/04/20 04:52

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

0

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

python

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

投稿2018/04/20 03:06

ikapy

総合スコア1167

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

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

python3_beginer

2018/04/20 04:51

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

0

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

python

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

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

投稿2018/04/19 18:57

R.Shigemori

総合スコア3376

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

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

0

素朴に。

python

1from io import StringIO 2import sys 3 4s = '''10 51 10 1 61 20 1 71 30 1 81 40 1 91 50 1 102 10 1 112 20 2 122 30 3 132 40 4 142 50 5''' 15 16a = StringIO(s) 17 18def input(): 19 return next(a) 20 21#------------------------------------------------ 22 23N = int(input()) 24data = [[int(v) for v in input().split()] for _ in range(N)] 25 26x, y, z = data[0] 27p = x 28r = z 29ans = [] 30for x, y, z in data[1:]: 31 if x == p: 32 r += z 33 else: 34 ans.append(r) 35 p = x 36 r = z 37ans.append(r) 38 39print(*ans)

投稿2018/04/19 15:05

編集2018/04/19 15:12
mkgrei

総合スコア8560

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

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

python3_beginer

2018/04/20 04:53

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問