>>66
例えば科学技術計算では解きたい連立一次方程式の係数行列が
大規模(100万元とか)かつ疎な(要素の大半が0)行列になることがしばしばある。
しかも非零要素が現れる位置が不規則で、反復毎に非零要素数が変わったりする。
こういう問題の係数行列を作る場合、行列を辞書で表すと具合がいい。
i行j列に要素 v を追加するには A[(i, j)] = v というようにタプルをキーにするわけだ。
値を次々に足し込むには A[(i, j)] = A.get((i, j), 0.0) + v のように書けばいい。
辞書は要素の追加と参照が効率的なので疎行列を表すのにうってつけのデータ構造だと言える。
ちなみに次数が大きいので
A = [[0.0 for j in range(1000000)] for i in range(1000000)]
みたいな二次元配列は事実上使えない(理由は試すまでもなく分かるよねw)
一次元のリストだと要素の追加と参照が非効率的なのでNG。
要素を追加し終わったら線形ソルバに投げるためのデータ構造に変換するわけだけど
リストだと行や列でソートする必要が生じる。
結論:辞書+タプルたん最高。