python 怎么取二维数组的每列元素 & 固定大小的小二维数组

对标**leetcode:36.有效的数独**
《python 怎么取二维数组的每列元素 & 固定大小的小二维数组》

写这个题解主要是为了记一下怎么在python取一个二维列表的每一列,还有怎么取每个3*3的小二维数组。

注意:!!!此题中的元素都是字符,所以判断的时候不能与数字比较,要跟字符比较!!!

python如何取二维数组的每一列

以此题为例,二维列表的第一列应该这样写:
[arr[0] for arr in board]
以此类推,取每一列应该是:
[[arr[idx] for arr in board] for idx in range(9)]
我们在这个题目中,每次取一列,可以这样写:

# 判断列
for i in range(9):
    for k in range(1, 10):
        if [arr[i] for arr in board].count(str(k)) > 1:
            return False

python如何取固定大小的二维数组

比如此题中的9 * 9的数组中取左上角的3 * 3的数组,应该这样写:
[i[j] for j in range(3) for i in board[0:3]]
依此类推,我们要取9个3*3的小二维数组,应该这样写:

# 判断3*3
for i in range(3):
    for j in range(3):
        for k in range(1, 10):
            if [arr[idx] for idx in range(3*j,3*(j+1)) for arr in board[3*i:3*(i+1)]].count(str(k)) > 1:
                return False

全部代码如下:

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        # print([[arr[idx] for arr in board] for idx in range(9)])
        # print([i[j] for j in range(3) for i in board[0:3]])
        
        # 判断行是够满足数独
        for row in board:
            for i in range(1, 10):
                if row.count(str(i)) > 1:
                    return False
        
        # 判断列
        for i in range(9):
            for k in range(1, 10):
                if [arr[i] for arr in board].count(str(k)) > 1:
                    return False

        # 判断3*3
        for i in range(3):
            for j in range(3):
                for k in range(1, 10):
                    if [arr[idx] for idx in range(3*j,3*(j+1)) for arr in board[3*i:3*(i+1)]].count(str(k)) > 1:
                        return False

        return True
    原文作者:那我来问你
    原文地址: https://blog.csdn.net/qq_41356707/article/details/124456438
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞