gpt4 book ai didi

python - 为什么我不能像对行那样对列进行切片?

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:30 25 4
gpt4 key购买 nike

我有一个数独板作为这个列表,

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][:] 但我不能对列做同样的事情。例如,当我在 board[:][col] 中写入 value 时,它会以某种方式选择 row,并以 col 值作为索引然后尝试查找指定的

例如,print(board[6][:]) 给出 ['.', 8, '.', 2, '.', 5, '.', '.', '.'](第 7 行)和 print(board[:][2]) 给出 ['.', '.', '.', 6, '.', 9, '.', 5, '.'](第 3 行)。我真的很困惑为什么会这样。

我的问题是,列是否有 board[row][:] 的等效语法?更重要的是,为什么 board[:][col] 不起作用?

最佳答案

等效语法是zip(*board)[2][:]:

>>> zip(*board)[2][:]
('.', '.', '.', '.', 2, '.', '.', '.', 9)
>>> 2 in zip(*board)[2][:]
True

参见 documentation for zip() .

您的方法不起作用,因为 board[:] 表示“所有行”,即与 board 相同。所以 board[:][2] 等同于 board[2]。您也不需要 value in board[row][:] 中的 [:] 部分。

需要说明的是,[:] 语法通常用于 copying ,正如@VPfB 提到的。由于您只是在阅读列表,所以这无关紧要(实际上效率略低,因为您正在创建整个板的内存副本)。

关于python - 为什么我不能像对行那样对列进行切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58586547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com