![21fbf8020ed2e8f693f8726e61359a4f.png](https://img-blog.csdnimg.cn/img_convert/21fbf8020ed2e8f693f8726e61359a4f.png)
目录
- 用Python解数独[0]
- 用Python解数独[1]:求每个单元格的行值域
- 用Python解数独[2]:求列值域和九宫格值域
- 用Python解数独[3]:求总值域
- 用Python解数独[4]:缩减值域
- 用Python解数独[5]:检测唯一值缩减值域
- 用Python解数独[6]:递归获得最终答案
- 用Python解数独[7]:递归(完结篇)
[2][1] 解决数独问题基本思路
4、求每个单元格的总值域
上回我们说到,我们已经获得了一个单元格的行值域、列值域和九宫格值域,可以考虑通过三个值域来获得这个单元格的总值域了。这个问题可以抽象为有lista , listb和listc,求三个列表的交集。
求lista, listb, listc三个列表的交集,其实可以分解为两步
求 lista 和 listb 的交集 tempa
求 tempa 和 listc 的交集 tempb
我们这样就把一个求三个列表交集的问题,简化为求两个列表交集,这样看起来简单了不少,代码:
def inersection(lista,listb):
tempa = []
for i in lista:
for j in listb:
if i == j:
tempa.append(i)
return tempa
代码基本逻辑就是,双重遍历lista和listb,如果lista中的元素i与listb中任一元素相等,那么将i放到tempa中
那么求三个列表交集的函数就有了多种写法:
第一种
def intersection(lista,listb):
tempa = []
for i in lista:
for j in listb:
if i == j:
tempa.append(i)
return tempa
def intersection_triple(lista,listb,listc):
tempa = intersection(lista,listb)
tempb = intersection(tempa,listc)
return tempb
第二种
def inersection(lista,listb,listc):
tempa = []
tempb = []
for i in lista:
for j in listb:
if i == j:
tempa.append(i)
for k in listc:
for l in tempa:
if k