[解決済み] Python, TypeError: ハッシュ化できない型: 'list'
質問
プログラム中に以下のようなエラーが発生します。 トレースバックです。
Traceback (most recent call last):
File "C:\Python33\Archive\PythonGrafos\Alpha.py", line 126, in <module>
menugrafos()
File "C:\Python33\Archive\PythonGrafos\Alpha.py", line 97, in menugrafos
zetta = Beta.caminhografo(grafo,va,vb)
File "C:\Python33\Archive\PythonGrafos\Beta.py", line 129, in caminhografo
if ([vo, a]) in vat == ([vo,vq]) in vat:
TypeError: unhashable type: 'list'
このプログラムは、隣接リストを作成し、頂点vaとvbの間にパスがあるかどうかを検索するもので、問題なく動作します。コレクション/defaultdictでリストの辞書を使用したので、適切に隣接頂点を追加することができます。
問題は、プログラムの最後にリストが作成された後のif節にあります。頂点間に有効なパスがあるかどうかを調べるために、dict で if 節を適切に使用する方法が見当たりません。また、grafoはグラフクラスです。
以下はそのコードです。
class graph:
v = 0
a = 0
node = []
class vertex:
ta = []
adj = {}
def caminhografo(grafo, va, vb):
vat = defaultdict(list)
i = 0
a = 0
z = 0
vo = int(va)
vq = int(vb)
vz = int(va)
vw = int(vb)
x = len(grafo.node)
if vz < vw:
for vz in range (vw+1):
a = 0
x = len(grafo.node)
for a in range (x):
if [int(vz),int(a)] in grafo.node:
vat[vz].append(a)
if vz > vw:
while vz > vw:
a = 0
x = len(grafo.node)
for a in range (x):
if[int(va),int(a)] in grafo.node:
vat[vz].append(a)
vz = vz - 1
a = 0
x = len(grafo.node)
print(vat)
for a in range (x):
if ([vo, a]) in vat == ([vo,vq]) in vat:
print("""
==============================================
Existe Caminho
==============================================
""")
break
elif ([vo,a]) in vat:
vo = a
else:
print("""
==============================================
Não Existe Caminho
==============================================
""")
break
ご協力ありがとうございました。
どのように解決するのですか?
問題なのは、このような場合に備えて
list
をキーとして
dict
であるため
dict
のキーは不変である必要があるからです。代わりにタプルを使ってください。
これはリストです。
[x, y]
これはタプルです。
(x, y)
なお、ほとんどの場合
(
と
)
はオプションです。
,
は実際にタプルを定義するものだからです。
[]
または
{}
または関数の引数として使用されます)。
を見つけることができるかもしれません。 Pythonチュートリアルのタプルのセクションを参照してください。 のタプルのセクションが役に立つかもしれません。
タプルはリストと似ているように見えますが、異なる状況、異なる目的で使われることがよくあります。タプルは 不変 で、通常、異種要素のシーケンスを含み、アンパッキング(このセクションの後半を参照)またはインデックス付け(または名前付きタプルの場合は属性によってもアクセスされる)によってアクセスされるものです。リストは変更可能であり、その要素は通常均質で、リストに対する反復によってアクセスされます。
そして、セクションの中で ディクショナリ :
数値の範囲でインデックスを作るシーケンスとは異なり、辞書はキーでインデックスを作ります。キーは不変の型であれば何でもよく、文字列と数値は常にキーになります。 タプルは文字列、数値、タプルのみを含む場合にキーとして使用できます。タプルが直接または間接的に変更可能なオブジェクトを含む場合、キーとして使用することはできません。リストをキーとして使用することはできません リストはインデックスの割り当てやスライスの割り当て、 append() や extend() のようなメソッドを使用してその場で変更することができるからです。
このエラーメッセージが何を意味するのか不思議に思っている方のために説明しますと、ビルトインの ハッシュ関数 がなく (設計上)、辞書は ハッシュテーブル .
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?