在Python3中设置函数错误:list是不可用的类型

时间:2015-12-15 20:02:27

标签: python python-3.x set

在临时文件中运行以下代码时,一切正常:

TypeError: unhashable type: 'list'

但是当我运行以下代码时

namespace Shared.User
{
    public enum PermissionType
    {
      System,
      Account,
      Site,
      Queue
    }
}

我收到错误Cannot implicitly convert type 'Shared.User.PermissionType [MyWebServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b9f7c69b7e2ca2dc]' to 'Shared.User.PermissionType [Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b9f7c69b7e2ca2dc]'. An explicit conversion exists (are you missing a cast?) MyWebServices

这里有什么问题?

2 个答案:

答案 0 :(得分:3)

发出

x = [1,1,1]
set(x)

您正在使用set中的元素构建x,这很好,因为x的元素属于int类型,因此是不可变的。 但是,mylist是列表列表(因为您的vector对象是列表)。这里的问题是mylist内的列表是可变的,因此无法进行哈希处理。这就是python拒绝构建set

的原因

您可以将vector列表转换为tuple来解决此问题。元组是不可变的,因此Python在set个对象列表中构建tuple没有问题。

演示:

>>> lst = [[1,2], [3,4]]
>>> set(lst)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> set(map(tuple, lst))
set([(1, 2), (3, 4)])

答案 1 :(得分:3)

这是对的。列表是不可删除的,因为它是可变的。改为使用元组。