2013-10-16 75 views
0

我需要找到如何檢查輸入,這是一個列表,是二維的,具有與行相同數量的列和相同數量的零件。例如:[[4,5],[4,5,6]] and [[2,3],[6,1],[2,9]]會生成錯誤消息。但是[[3,4,5],[4,6,8],[5,8,-1]] and [[4,5],[4,1]]將是正確的。 我曾嘗試過:需要幫助檢查python的二維矩陣輸入

for row in square: 
     if len(row) != len(square): 
      return False 

但這並不正確。

編輯:此外,這項檢查是在檢查列表的開始,所以它需要在if語句格式。

+0

「但這並不正確」 - 爲什麼不呢?你能舉一個例子,說明它不能正常工作嗎?你看到什麼錯誤或意外的行爲? – mgilson

+0

您可以更簡潔地嘗試'len(set(len(row)for square in square))== 1'來查看每行是否有相同數量的列。 –

+1

@WaleedKhan - 這沒有OP的短路行爲,它沒有斷言行長度==列長度,最後,我覺得它是一個相當全面的方式來做到這一點。如果你正在尋找一個班輪,我會建議所有(矩陣中的行(len(row)== len(矩陣))''。但是這仍然不能回答OP認爲原始解決方案有問題的問題。 – mgilson

回答

1

是否有返回值,如果測試沒有失敗?把你的代碼的功能,假設有什麼更多的測試:

def matrix_test(square): 
    for row in square: 
     if len(row) != len(square): 
      return False 

...要麼返回False或 不返回 無返回值。所以如果你通過調用這個函數來測試一個矩陣,你永遠不會得到通過測試的矩陣的真實結果。所以,如果它尚不存在,在最後加上一行:

return True 

然後,您可以檢查一個具體的矩陣

if matrix_test(matrix001): 
    #run the next test 

如果不是這將有助於看到更多的代碼的問題,知道運行時會發生什麼。

+0

啊,我只是假設'迴歸真實'在那裏。接得好。一個小小的挑逗 - 「不返回一個值」並不完全正確。如果函數中沒有返回語句(或者是一個簡單的'return'),那麼python會隱式地返回特殊的singleton'None'。 – mgilson

+0

@mgilson - 您的挑剔是一個公平的評論。我懷疑我對「沒有」不準確,但我也知道更具體會讓我的知識赤字更加暴露......謝謝澄清。 – Pines

+0

在一個布爾上下文中,'None'的計算結果爲False,所以,如果None和'False:是相同的。在這種情況下,通過他的函數可能OP正在下降,並且結果總是「錯誤的」。 – mgilson

1

假設你的矩陣是持有其他序列(如列表的列表,你在你的問題都有),你可以簡單地做一些這樣的順序:

def is_square(matrix): 
    return all(len(row) == len(matrix) for row in matrix)