forループを使ってリストのstringを大文字にする際に、新たなリストは必要ですか?

投稿者: Anonymous

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

コード

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

実行結果

'MON', 'TUE', 'WED', 'SAT'

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

コード

l=["Mon","tue","Wed","sat"]

for a in l:
     a=a.upper()
print(l)

実行結果

'Mon', 'tue', 'Wed', 'sat'

解決

回答

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

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

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

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

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

コード

l=["Mon","tue","Wed","sat"]

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

print(l)

結果

['MON', 'TUE', 'WED', 'SAT']
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *