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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1039閲覧

配列で他の配列の値まで変わってしまう。

langhtorn

総合スコア105

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/10/21 10:17

###問題点
実行結果がとても長いので一部を抜粋して載せています。
in_tの部分で配列tに何を代入したか分かるようにしています。
実行結果のd[ 3 ][0]= -2の部分なのですが、ここまでで配列tにはt[0]= -3 t[1]= -2 t[2]= -1が入っているのがわかっています。d[ 3 ][0]= -2の時代入したのはt[0]だけなのですが、次のループに入った際になぜかt[0]= 0 t[1]= -3 t[2]= -2となり、t[1] t[2]の値も変わってしまっています。なぜこのようになってしまうのか教えてください。
入力

3 15 -6 -3 0 4 -4 2 3 6 -2 0 -9 5 5 9 -5 5 4 4 2 8 -6 -2 3 9 6 9 1 5 -6 -1

実行結果の一部

--------- d[ 2 ][0]= -6 t[ 2 ]= -20 機械l= 2 in_t[ 2 ]= -1 ---------- t[0]= -3 t[1]= -2 t[2]= -1 d[ 3 ][0]= -2 t[ 0 ]= -3 機械l= 0 in_t[ 0 ]= 0 ---------- t[0]= 0 t[1]= -3 t[2]= -2 d[ 4 ][0]= -4 t[ 0 ]= 0 機械 0 では処理できない ---------

###コード

python

1from operator import itemgetter 2k=int(input()) #機械の数 3n=int(input()) #ジョブの数 4time=[] 5for i in range(n): 6 a=input() 7 td_in=a.split() 8 td=[int(i) for i in td_in] 9 time.append(td) 10d=sorted(time, key=itemgetter(1)) 11print("d=",d) 12j=0 #カウンター 13 14t=[] 15#tの初期化 16for i in range(k): 17 ti=-20 18 t.append(ti) 19#k機械区間スケジューリング問題のアルゴリズム 20for i in range(n): 21 print("t[0]=",t[0]," t[1]=",t[1]," t[2]=",t[2]) 22 for l in range(k): 23 print("d[",i,"][0]=",d[i][0]) 24 print("比較: t[",l,"]=",t[l]) 25 if d[i][0]>=t[l]: #ジョブiを機械jに割り当て可能 26 print("機械l=",l) 27 j+=1 #カウンタを1増やす 28 tf=d[i][1] #ジョブiの終了時刻を設定 29 t.insert(l,tf) 30 print("in_t[",l,"]=",t[l]) 31 print("----------") 32 break 33 else: 34 print("機械",l,"では処理できない") 35 print("---------") 36print(j) 37

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

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

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

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

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

guest

回答1

0

ベストアンサー

t.insert(l,tf)
のところで、tのlの位置にtfを「挿入」しています。

たとえば下のようなtがあったとします。
t = [t0, t1, t2, t3,...]
この0の位置にtfを代入すると
t.insert(0,tf)
下のように他の要素が後ろにズレていきます。
t = [tf, t0, t1, t2, ...]
t[0]だけを変えたつもりで、t[1]やt[2]も変わってしまうのはこのためです。

t[l]の値だけを変更したいなら
t[l] = tf
としたほうが良いですね。

投稿2020/10/21 10:37

編集2020/10/21 10:38
jeanbiego

総合スコア3966

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

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

langhtorn

2020/10/21 12:13

分かりやすい解説をありがとうございます。よく理解できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問