检查每个数字python

时间:2014-10-22 18:48:11

标签: python

我正在尝试读取文件并检查每个数字是否存在,都是唯一的。我试着检查列表长度和集合长度的相等性。我收到此错误TypeError:unhashable type:'list'我必须将列表转换为其他内容吗?

这是代码

def readMatrix(filNam):
    matrixList = []
    numFile = open(filNam, "r")
    lines = numFile.readlines()
    for line in lines:
        line = line.split()
        row = []
        for i in line:
            row.append(int(i))
        matrixList.append(row)
    return matrixList

def eachNumPresent(matrix):
    if len(matrix) == len(set(matrix)):
        return True
    else:
        return False

3 个答案:

答案 0 :(得分:2)

列表不能是集合的元素,因此您无法将列表列表传递给set()。您需要将列表列表解析为单个列表,然后传递给set(因此整数是您的设置元素)。

unraveled = [x for line in matrix for x in line]
return len(unraveled) == len(set(unraveled))

答案 1 :(得分:1)

您的matrix是一个列表清单。当您编写set(matrix)时,Python会尝试创建一组矩阵的所有行。您的行是列表,它们是可变且不可删除的。

你想要的是矩阵中所有的集合。您可以使用显式循环来计算它:

all_values = set()
for row in matrix:
  all_values.update(row)
# here all_values contains all distinct values form matrix

你也可以写一个嵌套的list comprehension

all_values = set(x for row in matrix for x in row)

答案 2 :(得分:0)

“set”在列表列表中不起作用,但在元组列表上工作正常。所以使用下面的代码:

matrixList.append(tuple(row))

而不是:

matrixList.append(row)