関数定義していることは、今回の問題には関係無いです。
valは確かにarglistの一要素ではありますが、valへの代入がarglistに影響することはありません。※
次のコードでarrが[42, 1, 4]にならないのと同じ理由です。
Python
1arr = [3, 1, 4]
2e = arr[0]
3e = 42
4
5print(arr) # => [3, 1, 4]
次のように添え字で直接アクセスすれば変更可能です。
Python
1arr[0] = 42
2print(arr) # => [42, 1, 4]
添え字アクセスをfor文で書こうとする場合、rangeやenumerateを使うことになります。
Python
1for i in range(len(arr)):
2 if arr[i] == ???:
3 arr[i] = ???
Python
1for i, e in enumerate(arr):
2 if e == ???:
3 arr[i] = ???
※ ちょっとややこしい話
a += b と書いたとき、
aの型に依ってはインプレースに操作が行われ、当然元のリストにも影響します。
Pythonにおいては、a += b と a = a + b の意味が異なることがあります。
Python
1a = [1, 2, 3]
2b = a
3b = b + [4, 5, 6]
4
5print(a, b) # => [1, 2, 3] [1, 2, 3, 4, 5, 6]
Python
1a = [1, 2, 3]
2b = a
3b += [4, 5, 6]
4
5print(a, b) # => [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6]
コードの貼り方について
teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。