理系母の趣味はプログラミング

理系院卒、メーカー技術職の二児の母が、PythonやVBAで色々と作ってアップしていくブログです。

【11日目】for ループでリストを更新してみる

こんばんは、なぺです。
前回はforループを勉強しました。
今回はそれを応用して、リストの要素を更新する処理を書いてみようと思います。

まずリストを作ります。

>>> dora = ["doraemon", "nobita", "shizuka", "giant", "suneo"]
>>> print(dora)
['doraemon', 'nobita', 'shizuka', 'giant', 'suneo']

できました。
これをすべて大文字に変換したいと思います。

dora = ["doraemon", "nobita", "shizuka", "giant", "suneo"]

i=0
for babuu in dora:
    up = dora[i]
    up = up.upper()
    dora[i] = up
    i += 1

print(dora)

出力結果↓

['DORAEMON', 'NOBITA', 'SHIZUKA', 'GIANT', 'SUNEO']

と、参考書には書いてあったのですが(リストや変数名は好き勝手変えてます)、
これだと変数babuuの意味が?だったのでアレンジしました。

dora = ["doraemon", "nobita", "shizuka", "giant", "suneo"]

i=0
for babuu in dora:
    dora[i] = babuu.upper()
    i += 1

print(dora)

出力結果↓

['DORAEMON', 'NOBITA', 'SHIZUKA', 'GIANT', 'SUNEO']

できたじゃん!(やるじゃん私)

変数babuuには、ループを繰り返すたびにリストの要素が一つずつ入っているのだから、わざわざdoraリストのi番目を変数upに入れて~ごねごね(up = dora[i]あたり)なんてしなくてもいいよね?
間違ってたらごめんなさい。

上の方法では、ループのたびにiをインクリメントして、次のループで使うインデックス値としているのですが、Pythonにはインデックス値を自動的に用意してくれる方法があります。
enumerate関数というのを使います。(enumerate:列挙する)

dora = ["doraemon", "nobita", "shizuka", "giant", "suneo"]

for i, babuu in enumerate(dora):
    dora[i] = babuu.upper()

print(dora)

出力結果↓

['DORAEMON', 'NOBITA', 'SHIZUKA', 'GIANT', 'SUNEO']

さらにすっきりしました!良き!
enumerate関数にdoraリストを渡すと、現在のループにおけるインデックスをiに渡してくれるのですね~

次は、加工したデータを新しい別のリストに格納するコードを書いてみます。

dora = ["doraemon", "nobita", "shizuka", "giant", "suneo"]
classmates = ["dekisugi","yasuo","haruo"] #別のリスト
friends = [] #データ加工後の格納先リスト

for new in dora: #まずはdoraリストを加工→別リストに格納
    new = new.upper()#大文字に変換
    friends.append(new)#friendsリストに格納

for new in classmates: #次にclassmatesリストを加工→別リストに格納
    new = new.upper()
    friends.append(new)#friendsリストに格納
    
print(friends)

出力結果↓

['DORAEMON', 'NOBITA', 'SHIZUKA', 'GIANT', 'SUNEO', 'DEKISUGI', 'YASUO', 'HARUO']

できました!

今日はここまでにします。
思い出のマーニーに見はまってあんまり進まなかったよ^^

それではまた