我有一个数独板作为此列表,
board = [ ['.', 2, '.', '.', '.', 4, 3, '.', '.'],
[9, '.', '.', '.', 2, '.', '.', '.', 8],
['.', '.', '.', 6, '.', 9, '.', 5, '.'],
['.', '.', '.', '.', '.', '.', '.', '.', 1],
['.', 7, 2, 5, '.', 3, 6, 8, '.'],
[6, '.', '.', '.', '.', '.', '.', '.', '.'],
['.', 8, '.', 2, '.', 5, '.', '.', '.'],
[1, '.', '.', '.', 9, '.', '.', '.', 3],
['.', '.', 9, 8, '.', '.', '.', 6, '.'] ]
通过以下方式,我可以轻松地检查某个值是否连续出现或不那么费力,
value in board[row][:]
,但我不能为列做同样的事情。例如,当我写value in board[:][col]
时,它会以某种方式选择row
,并用值col
进行索引,然后尝试查找指定的value
。
例如,print(board[6][:])
给出['.', 8, '.', 2, '.', 5, '.', '.', '.']
(第7行),而print(board[:][2])
给出['.', '.', '.', 6, '.', 9, '.', 5, '.']
(第三行 )。
我真的很困惑为什么会这样。
我的问题是,某列是否具有board[row][:]
的等效语法?更重要的是为什么board[:][col]
不起作用?
答案 0 :(得分:3)
等效语法为zip(*board)[2][:]
:
>>> zip(*board)[2][:]
('.', '.', '.', '.', 2, '.', '.', '.', 9)
>>> 2 in zip(*board)[2][:]
True
您的方法无效,因为board[:]
表示“所有行”,即与board
相同。因此board[:][2]
等效于board[2]
。您也不需要[:]
中的value in board[row][:]
部分。
要清楚,{@ {3}}通常使用[:]
语法,如@VPfB所述。由于您只阅读列表,所以没关系(事实上,效率很低,因为您正在创建整个板的内存中副本)。
答案 1 :(得分:0)
如果使用的是NumPy,则可以轻松访问列值。
>> board = numpy.array([
[".", 2, ".", ".", ".", 4, 3, ".", "."],
[9, ".", ".", ".", 2, ".", ".", ".", 8],
[".", ".", ".", 6, ".", 9, ".", 5, "."],
[".", ".", ".", ".", ".", ".", ".", ".", 1],
[".", 7, 2, 5, ".", 3, 6, 8, "."],
[6, ".", ".", ".", ".", ".", ".", ".", "."],
[".", 8, ".", 2, ".", 5, ".", ".", "."],
[1, ".", ".", ".", 9, ".", ".", ".", 3],
[".", ".", 9, 8, ".", ".", ".", 6, "."],
])
>> board[:,0]
>> array([".", 9, ".",".",".",6,".",1,"."])
答案 2 :(得分:-1)
您的困惑在于如何在Python中建立索引。这可能会清除它:
board = [
[".", 2, ".", ".", ".", 4, 3, ".", "."],
[9, ".", ".", ".", 2, ".", ".", ".", 8],
[".", ".", ".", 6, ".", 9, ".", 5, "."],
[".", ".", ".", ".", ".", ".", ".", ".", 1],
[".", 7, 2, 5, ".", 3, 6, 8, "."],
[6, ".", ".", ".", ".", ".", ".", ".", "."],
[".", 8, ".", 2, ".", 5, ".", ".", "."],
[1, ".", ".", ".", 9, ".", ".", ".", 3],
[".", ".", 9, 8, ".", ".", ".", 6, "."],
]
first = board[0]
second = board[0][0]
# Prints the row, as expected.
print(first) # ['.', 2, '.', '.', '.', 4, 3, '.', '.']
# Prints the value of the INDEX in the row[0].
print(second) # .
# Finds the actual column values by iterating through the values in index 0 of all the rows.
column = []
for row in board:
column.append(row[0]) # Row number 0.
print(column) # ['.', 9, '.', '.', '.', 6, '.', 1, '.']