参见第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'
列表之所以成为问题,是因为它们是动态的。您可以更改列表中的一个元素,但元组是常量。你不想构建一个密钥可以在你不知情的情况下更改的哈希。