我正在写一个数独求解器,并遇到了这个奇怪的行为。如果我做到以下几点:为什么这些看起来相同的代码片段的行为有所不同? (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)'次。 –