[英]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.