簡體   English   中英

檢查每個數字python

[英]Check each number python

我正在嘗試讀取文件並檢查是否存在每個數字,所有數字都是唯一的。 我嘗試檢查列表的長度和集合的長度是否相等。 我收到此錯誤TypeError:無法散列的類型:'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

列表不能是集合的元素,因此您不能將列表的列表傳遞給set()。 您需要將列表列表分解為單個列表,然后傳遞給set(因此整數是set元素)。

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

您的matrix是一個列表列表。 當您編寫set(matrix) ,Python會嘗試創建一組矩陣的所有行。 您的行是列表,它們是可變的且不可散列。

您需要的是矩陣中所有的集合。 您可以使用顯式循環來計數:

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

您還可以編寫嵌套列表推導

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

“ set”在列表列表上不起作用,但在元組列表上很好用。 因此,使用以下代碼:

matrixList.append(tuple(row))

代替 :

matrixList.append(row)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM