65741


forループを使って以下のように実行するとうまく結果が出ました。

**コード**

[code]

    l=["Mon","tue","Wed","sat"]
    b=[]
    for a in l:
         a=a.upper()
         b.append(a)
    print(b)
    
[/code]

**実行結果**

[code]

    'MON', 'TUE', 'WED', 'SAT'
    
[/code]

しかし、以下のようにlist bをのぞいてprint(l)とすると、以下の実行結果となりました。  
なぜこのような違いになるのでしょうか？  
リストの中のstringを変数aに入れて大文字に処理をした後、新たにリストを作る必要があるのでしょうか？

**コード**

[code]

    l=["Mon","tue","Wed","sat"]
    
    for a in l:
         a=a.upper()
    print(l)
    
[/code]

**実行結果**

[code]

    'Mon', 'tue', 'Wed', 'sat'
    
[/code]


CC BY-SA 4.0
2020-04-18T08:02:33.273
65737
2020-04-22T06:33:18.743
2020-04-18T11:49:35.947
3060
39688
question
python
forループを使ってリストのstringを大文字にする際に、新たなリストは必要ですか？


**回答**

> なぜこのような違いになるのでしょうか？

`a=a.upper()`において代入前の`a`はリスト`l`の要素を示していましたが、`a.upper()`はリスト`l`とは無関係なオブジェクトです。代入によって`a`はリスト`l`の要素を示さなくなっただけで、リスト`l`は変化しません。

> 新たにリストを作る必要があるのでしょうか？

リスト`l`の要素を置き換えれば、新たなリストは必要ありません。

[code]

    for i in range(len(l)):
        l[i] = l[i].upper()
    
[/code]

* * *

## コード

[code]

    l=["Mon","tue","Wed","sat"]
    
    for i in range(len(l)):
         l[i] = l[i].upper()
    
    print(l)
    
[/code]

## 結果

[code]

    ['MON', 'TUE', 'WED', 'SAT']
    
[/code]


CC BY-SA 4.0
2020-04-18T09:23:04.097
65741
2020-04-22T06:33:18.743
2020-04-22T06:33:18.743
35558
35558
65737
answer