PythonでCSVを扱っていてドハマりしたのでメモ。
リストの結合操作
成績表のCSVを標準ライブラリで読み込んで、次のようなリストができているとする。
2人分の成績表。それぞれ数学と英語の点数が記録されている。
paper1 = [
["Math", "90"],
["English", "75"]
]
paper2 = [
["Math", "38"],
["English", "100"]
]
このとき、成績表の束を管理するリストを作るには append と += のどちらを使えばよいだろうか?
まずは+=
とりあえずREPLで見てみる。
>>> papers = []
>>> papers += paper1
>>> papers += paper2
>>> papers
[['Math', '90'], ['English', '75'], ['Math', '38'], ['English', '100']]
おおっと?マージされてしまったぞ?これは期待した結果ではない。
お次はappend
こちらもREPLで。
papers = []
>>> papers.append(paper1)
>>> papers.append(paper2)
>>> papers
[[['Math', '90'], ['English', '75']], [['Math', '38'], ['English', '100']]]
2枚の成績表が分かれて入りました。期待してた結果はこっちですね。
タネあかし
結論としては、+ や += 演算子は extend() メソッドを呼び出していました。
入れる先のリストを拡張していたんですね。リストの場合は結合されます。
一方、append() メソッドは、入れるオブジェクトがリストであっても結合せずに追加します。