set(数组中的单个对象)返回set(字符串)



参见第1部分:http://artificial-intelligence-class.org/homeworks/hw4/homework4.html

我试图为我的家庭作业中的一个答案返回一个集合(数组(,但我只是返回一个集(字符串(,所以它说我的答案不正确。只有当我正在铸造的数组的长度为1时,才会发生这种情况。这很烦人,因为稍后我将设置两个数组之间的差异,并且它将不会编译,因为这两个数组的类型不相同。这是我的代码:

def get_values(self, cell):
if cell in self.board:
value = [self.board[cell]]
return set([tuple(value)])
else:
values = (1,2,3,4,5,6,7,8,9)
return set([values])

执行

b = read_board("sudoku/hw7-medium1.txt")
print(Sudoku(b).get_values((0, 1)))

退货{'1'}何时返回退货{[1]}

set((是set对象的构造函数。

它接收一个可迭代的参数。Iterable是要转换为集合的序列(字符串、元组等(或集合(集合、字典等(或迭代器对象。

这意味着,若将数组、元组等作为要设置的单个参数传递,它只需创建一组包含的元素。

此外,集合不可能包含列表作为元素

a = (1,2,[3,4])

会给你一个错误,说列表不是一个可散列的对象。

然而,它是有可能实现你试图做的事情:

a = set(
((1,2,3),)  # this is a tuple, whose 1st element is a tuple
)

a现在包含

{(1, 2, 3)}

尽管如此,没有实际的列表:

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

列表之所以成为问题,是因为它们是动态的。您可以更改列表中的一个元素,但元组是常量。你不想构建一个密钥可以在你不知情的情况下更改的哈希。

最新更新