首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >8个Queens Python实现空列表

8个Queens Python实现空列表
EN

Stack Overflow用户
提问于 2018-12-01 02:02:50
回答 1查看 50关注 0票数 0
代码语言:javascript
复制
def check(a,i):
   n = len(a)
   return not (i in a or
               i+n in [a[j]+j for j in range(n)] or
               i-n in [a[j]-j for j in range(n)]) 

def rsearch(N):
   global a
   global b

   if len(a) == N:
      b.append(a) #<-- this works HERE
      print(a) #<-- this also works HERE
      return True

   z = False
   for i in range(N):
      if check(a,i):
         a.append(i)
         z = rsearch(N) or z
         del a[-1]
   return z


a = []
b = []
rsearch(8)
print(a) #<-- empty list ??
print(b) #<-- list of 92 empty lists ?? ??
print(len(b)) #<-- returns 92

所以我用Python编写了8 Queens问题的这个实现,它可以工作,但是我有一些格式化问题。在我的len(a) == N检查中,我打印了解决方案列表,工作得很好,我将解决方案列表附加到另一个列表,b,这在那个时候很好。但是最后一个print(a)返回一个空列表,而print(b)返回一个包含92个空列表的列表,它找到了每个解决方案,但它们都是空的。谁知道我做错了什么,为什么是空的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-01 02:08:20

关于为什么a是空的:您执行a.append(i),然后执行del a[-1]。这有效地将一个元素附加到a中,然后再次删除它。因此,总数将保持为零。

关于为什么b只包含空列表:将a附加到b (b.append(a)),因此b存储对a指向的列表的引用。因为a是一个空列表,所以b包含对同一个空列表a的92个(类似的)引用。如果您应该附加一个a的副本,例如b.append([x for x in a])

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53567154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档