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