我只有一个只有数字的矩形矩阵,我想计算其中不同的唯一2×2正方形矩阵的数量。
我将所有可能的2x2矩阵存储在新列表中。现在,我想从此新列表中移出所有重复的矩阵。我不知道该怎么做。如果我使用'set()'函数,则会显示错误“无法散列的类型:'列表'”。
def differentSquares(matrix):
squares_list = []
for i in range (len(matrix)-1):
for j in range (len(matrix[i])-1):
temp=[[matrix[i][j],matrix[i][j+1]],
[matrix[i+1][j],matrix[i+1][j+1]]]
squares_list.append(temp)
return len(squares_list)
我知道可以通过不同的逻辑来解决此问题,但我仍然想知道有人如何从矩阵列表中删除重复的矩阵。
如果我输入以下内容
Matrix=[[1,2,1],
[2,2,2],
[2,2,2],
[1,2,3],
[2,2,1]]
当我返回列表的长度而不删除重复项时,返回的值为8。 如果我删除重复项,答案将变为6(正确答案)
答案 0 :(得分:0)
列表是可变的(可以更改),因此不能进行哈希处理。相反,请尝试使用不可变的元组,因此可以对其进行哈希处理。
def differentSquares(matrix):
squares_list = []
for i in range(len(matrix) - 1):
for j in range(len(matrix[i]) - 1):
temp=((matrix[i][j], matrix[i][j+1]),
(matrix[i+1][j], matrix[i+1][j+1]))
squares_list.append(temp)
return len(set(squares_list))
答案 1 :(得分:0)
如Alex所述,您只能对集合中的不可变类型对象进行哈希处理。 list
是可变的,而tuple
是不可变的。
有关更多信息-Hashable, immutable
此外,您可以将不可变对象直接添加到集合中。由于集合将始终包含唯一元素,因此add
操作将不会添加任何重复项。
def differentSquares(matrix):
unique_squares = set() # Create a set for adding unique 2x2 matrices
for i in range (len(matrix)-1):
for j in range (len(matrix[i])-1):
temp=((matrix[i][j],matrix[i][j+1]),
(matrix[i+1][j],matrix[i+1][j+1]))
unique_squares.add(temp) # Add the matrix. It will not add any duplicates
return len(unique_squares) # Returns 6 for the given example