Python如何判断数独是否合法


Posted in Python onSeptember 08, 2016

介绍

该数独可能只填充了部分数字,其中缺少的数字用 . 表示。

注意事项

一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。

解体思路

将数独按照行、列和块进行预处理,然后分别判断是否合法。
利用Python的表达式推导,匿名函数和all函数可以很方便的进行处理。

代码

class Solution:

# @param board, a 9x9 2D array
# @return a boolean
def isValidSudoku(self, board):
 rows = [list(lst[::]) for lst in board]
 columns = [[lst[idx] for lst in board] for idx in range(9)]
 blocks_origin = [board[row][column] for x in [[0, 1, 2], [3, 4, 5], [6, 7, 8]] for y in [[0, 1, 2], [3, 4, 5], [6, 7, 8]] for row in x for column in y] # 利用一些技巧直接按块储存数据
 blocks = [[blocks_origin[row * 9 + column] for column in range(9)] for row in range(9)]
 check = lambda lst: all([lst.count(x) == 1 for x in lst if x != '.']) # 判断一条记录(按某种方式排列的九个数字)是否合法
 return all([check(x) for style in (rows, columns, blocks) for x in style]) # 一步搞定

小结

能不用循环体尽量不用循环体,以上就是这篇文章的全部内容,希望对大家的学习和工作能有所帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
跟老齐学Python之Python文档
Oct 10 Python
Python多线程编程(一):threading模块综述
Apr 05 Python
Python实现的计算器功能示例
Apr 26 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
由面试题加深对Django的认识理解
Jul 19 Python
使用pandas读取文件的实现
Jul 31 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
Jan 10 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
浅谈Django前端后端值传递问题
Jul 15 Python
Python使用windows设置定时执行脚本
Nov 12 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
Python绘制地图神器folium的新人入门指南
May 23 Python
python框架django基础指南
Sep 08 #Python
python中星号变量的几种特殊用法
Sep 07 #Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 #Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 #Python
Python 编码处理-str与Unicode的区别
Sep 06 #Python
Python如何获取系统iops示例代码
Sep 06 #Python
python3编码问题汇总
Sep 06 #Python
You might like
PHP文件上传实例详解!!!
2007/01/02 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
php 浮点数比较方法详解
2017/05/05 PHP
php命令行写shell实例详解
2018/07/19 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
Python正则表达式分组概念与用法详解
2017/06/24 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
职业生涯规划书基本格式
2014/01/06 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
滞留工资返还协议书
2014/10/19 职场文书
门市房租房协议书
2014/12/04 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
公司开业致辞
2015/07/29 职场文书