【Python】リストの要素を一括修正する

1218 ワード

《Pythonプログラミング:入門から実戦まで》練習8-11:make_という名前を書くgreat()の関数は、マジシャンリストを変更し、各マジシャンの名前に「the Great」という文字を加えます.forループを使用してリスト要素を巡り始め、「the Great」+元の要素を現在の要素に割り当てます.結果はありません.元のコード:
def make_great(magicians):
    for magician in magicians:
        magician = "the Great " + magician
        print(magician)
    return(magician)
magicians=['dante','vergil','leo']
make_great(magicians)
print(magicians)

実行結果:the Great dante the Great vergil the Great leo[‘dante’,‘vergil’,‘leo’]magiciansというリストが変更されていないことがわかりました.
Why? コードを修正しました.コードの変更:
def make_great(magicians):
	n=len(magicians)
	for i in range(0,n):
		magicians[i]="The Great "+magicians[i]
		print(magicians[i])
	return magicians

magicians=['dante','vergil','leo']
make_great(magicians)
print(magicians)

実行結果:The Great dante The Great vergil The Great leo[‘The Great dante’,‘The Great vergil’,‘The Great leo’]
成功した.WHY? 推測:元のコードのforループのmagicianは、インデックスリストを逆にすることはできません.したがって、元のコードブロックを実行すると、magicianという一時変数が付与されるだけで、リスト自体に影響はありません.一方、修正コードでは、コードmagicians[i]がリストi-1の位置の要素を明確にインデックスしているため、この修正は直接その要素に対して有効である.
Pythonを独学したばかりなので、間違いを指摘してください.