みなさん、こんにちは。
リストコピーについて気を付けることを紹介したいと思います。
間違ったリストのコピー例
任意のリストから削除したいリストにある要素を削除するプログラムを作りました。
insectが削除したい要素のリスト(昆虫のリスト)です。templistのリスト(哺乳類と昆虫が混ざったリスト)からinsectにある要素(昆虫の要素)を削除するプログラムを作成しました。
templist = ['カブトムシ','カブトムシ','ライオン', 'トラ', 'カブトムシ', '牛', '蝶々']
insect = ['カブトムシ', '蝶々']
templist2 = templist
for i in templist :
for j in insect:
if j in i:
templist2.remove(i)
print(templist2)
出力すると下記の通りになりました。
['ライオン', 'トラ', 'カブトムシ', '牛']
カブトムシが残っているという結果になりました。
解決策
下記の式でtemplistとは別のtemplist2を作ったつもりだったのですが、これは変数名だけが違うだけで本質的に同じリストであったのです。
templist2 = templist
つまり、templistの要素を削除すると同時にtemplist2の要素も削除され、templist2の要素を削除すると同時にtemplistの要素も削除されるのです。同じものということになります。
別のリストを作成する時は copy() を使用します。
templist2 = templist.copy()
では正しいプログラムは下記の通りになります。
templist = ['カブトムシ','カブトムシ','ライオン', 'トラ', 'カブトムシ', '牛', '蝶々']
templist2 = templist.copy()
insect = ['カブトムシ', '蝶々']
for i in templist :
print(i)
for j in insect:
if j in i:
templist2.remove(i)
print(templist2)
出力されるのは下記のとおりです。
['ライオン', 'トラ', '牛']
リストをコピーする時は気を付けて下さいね。
「役に立った!」と思れましたら、下のSNSボタンで記事のシェアをしていただけると嬉しいです!
コメント