python - 集合(数组中的单个对象)返回集合(字符串)
问题描述
见第 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是要转换成集合的序列(字符串、元组等)或集合(集合、字典等)或迭代器对象。
这意味着,如果您将数组、元组等作为单个参数传递给 set,它只会创建它包含的一组元素。
此外,集合不可能包含列表作为元素
a = (1,2,[3,4])
会给你一个错误,说列表不是可散列的对象。
但是,可以完成您尝试做的事情:
a = set(
((1,2,3),) # this is a tuple, whose 1st element is a tuple
)
现在包含
{(1, 2, 3)}
仍然没有实际的列表:
>>> a = set( ([1,2,3],) )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
列表存在问题的原因是它们是动态的。您可以更改列表的元素 - 但元组是不变的。您不想构建一个哈希值,它的密钥可以在您不知情的情况下更改。
推荐阅读
- sql - 如何在 tsql 中选择具有某些行优先级的随机行
- mysql - 从 SQL (Laravel) 检索 JSON 格式数组时遇到问题
- javascript - 当我检查值是否在前一行中定义时,为什么 Typescript 会抱怨可能的未定义值?
- python - 接受1个可迭代参数并将所有对象添加到列表中的函数(如果它们是int或float)?
- javascript - 在 Express 应用程序中添加参数时出现 CORS 错误
- python - 尽管 Matplotlib FuncAnimation(...,repeat=False) 保存的动画情节继续循环
- php - 如何从数据库中获取数据数组并使用 PHP 将其存储在变量中
- javascript - 尝试使用 JS 使 HTML 中的 img 可点击
- google-apps-script - 在从多个选项卡创建单独的电子表格时复制和应用条件格式
- php - 在 JSON 文件中的逗号后自动添加换行符?