我正在寫一個數獨求解器,並遇到了這個奇怪的行爲。如果我做到以下幾點:爲什麼這些看起來相同的代碼片段的行爲有所不同? (Python 3)
r = range(1,len(board)+1)
b = block(board,x,y)
nums = [x for x in r if x not in b]
nums
將是這樣計算它的不同:
nums = [x for x in range(1,len(board)+1) if x not in block(board,x,y)]
的block
很簡單如下:
return sum([col[y*N(board):(y+1)*N(board)]
for col in board[x*N(board):(x+1)*N(board)]],
[])
哪裏N
只是董事會規模的平方根,董事會只是一個數字清單的列表。 (之所以像N
和len
到處都是它應該適用於不是9x9的板子)
我的問題很簡單:爲什麼這些東西會不一樣?它只是讀取值並將它們存儲在變量中,而不是將任何東西分配給板本身,所以如果我做b = a
然後使用a
或僅使用b
開始時爲什麼會這樣?
在第一種情況下'x'是什麼?在第二種情況下,你至少要重寫列表理解變量'x'。 – miradulo
我假設你的'block'函數返回某物。第二個版本的每次調用都不同,基於'x'的變化,其中'b'在第一個中始終保持相同。 – schwobaseggl
他們說什麼。請注意,第二個版本不必要地重新計算'block(board,x,y)'len(board)'次。 –