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

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

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

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

Q&A

1回答

912閲覧

pythonで繰り返し文の中で二次元配列の要素が減っていってしまいます

eeeeeeeeee

総合スコア10

Python 3.x

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

0グッド

0クリップ

投稿2019/01/15 13:06

実現したいこと、問題

pythonを初めて扱うためもっといい方法があるかもしれませんが、今回はこの方法で解決したいと思っています。
最後に出力したい二次元配列の要素が元の数と同じ49個あるはずなのに、41までしかありません。
繰り返しの途中で全てのlistrecordをprintしたら徐々に数が減っていました。この理由がわからず、どこを直したらいいのかわかりません。
解決方法がわかる方よろしくお願いいたします。

該当のソースコード

python3

1 2 3import random 4import numpy as np 5import pandas as pd 6 7list = [random.randint(20, 60) for i in range(6)] 8print(list) 9 10listmin = [] 11listrecord = [] 12listwhere = [] 13 14 15for i in range(1,51): 16 where = min(range(len(list)), key=lambda i: list[i]) 17 18 a = random.randint(20,60) 19 20 21 newmin = min(list)+a 22 list[where] = newmin 23 24 listmin.append(min(list)) 25 26 27 listrecord.append(list[0]) 28 listrecord.append(list[1]) 29 listrecord.append(list[2]) 30 listrecord.append(list[3]) 31 listrecord.append(list[4]) 32 listrecord.append(list[5]) 33 arr_listrecord = np.array(listrecord) #listrecordの一次元配列 34 35 listwhere.append(where) 36 arr_listwhere = np.array(listwhere) 37 38 print(list) 39 40listrecord1 = np.reshape(arr_listrecord, (50, 6)) #listrecord1の49*6の二次元配列 41 42print(listmin) 43print(listrecord) 44print(listrecord1) 45print(arr_listrecord) 46print(arr_listwhere) 47 48 49 50 51for p in range(2,16)[::-1]: #p = 差 52 53 a = 16-p 54 b = 36+a 55 56 later = max(listmin[20+2*a],listmin[21+2*a]) 57 resttime = listmin[b-1]-later #listmin[b-1] = b番目の試合開始時間 58 59 60 61 if 0 <= resttime < 30: 62 start = (30-resttime) + listmin[b-1] 63 elif resttime < 0: 64 start = 30 + (-resttime) + listmin[b-1] 65 else: 66 start = listmin[b-1] 67 68 69 70 arr_listrecordupper = listrecord1[:b-2] #listrecord上の部分(array型) 71 arr_listrecordlower = listrecord1[b-1:] #listrecord下の部分(array型) 72 73 df = pd.DataFrame(arr_listrecordlower) 74 75 76 77 if listwhere[b-1] == 0: 78 df = arr_listrecordlower + np.array([start,0,0,0,0,0]) 79 elif listwhere[b-1] == 1: 80 df = arr_listrecordlower + np.array([0,start,0,0,0,0]) 81 elif listwhere[b-1] == 2: 82 df = arr_listrecordlower + np.array([0,0,start,0,0,0]) 83 elif listwhere[b-1] == 3: 84 df = arr_listrecordlower + np.array([0,0,0,start,0,0]) 85 elif listwhere[b-1] == 4: 86 df = arr_listrecordlower + np.array([0,0,0,0,start,0]) 87 else: 88 df = arr_listrecordlower + np.array([0,0,0,0,0,start]) 89 90 91 92 listrecord1 = np.vstack((arr_listrecordupper,df)) 93 94 95print(listrecord1) 96print(listrecord1[41])

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

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

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

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

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

hayataka2049

2019/01/15 13:34

自分で見てわかると思いますが、コードが読めません(インデントはデフォルトでは消えます)。https://teratail.com/tour を参考にシンタックスハイライト・マークダウンでコードを囲んでください。質問文は再編集できます。
guest

回答1

0

残念ながら、コードが読めない以上回答不可です。

投稿2019/12/08 12:06

amahara_waya

総合スコア1029

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問