1

次のことを効果的に行うプログラムを実行しようとしています。

if [4, 5, False, False, False, False] in {}

そして、この行で、私はTypeError: unhashable type 'list'

私は何を間違っていますか?

4

3 に答える 3

5

このコードif foo in {}は、ディクショナリのいずれかのキーが と等しいかどうかをチェックしますfoo

あなたの例でfooは、リストです。リストはハッシュ不可の型であり、ディクショナリのキーにすることはできません。

リストのエントリが辞書のキーまたはセットに含まれているかどうを確認したい場合は、次を試すことができます。

if any([x in {} for x in (4, 5, False)]).

値のいずれかがリストと等しいかどうかを確認したい場合は、次を試すことができます。

if any([v == [4, 5, False, False, False, False] for v in your_dict.values()])

于 2013-02-07T14:30:53.940 に答える
1

Asetはハッシュ可能なオブジェクトを保持します。つまり、それらはソート可能であり、効率的な検索/挿入方法が可能になります。一方、 alistはハッシュ可能ではありません。それがあなたのコードがエラーを起こす理由です。tupleの代わりに使用することをお勧めしますlist

if (4, 5, False, False, False, False) in {}:
  ...
于 2013-02-07T14:37:19.697 に答える
0

次のようなことができます

if all(x in {} for x in [4, 5, False, False, False, False]):
    ....

また

if any(x in {} for x in [4, 5, False, False, False, False]):
    ....

あなたが望むものに応じて

于 2013-02-07T14:33:46.303 に答える