我有一些代码可以解决图形着色问题(广泛定义为将"颜色"分配给无向图的问题,确保没有两个由边连接的顶点具有相同的颜色).我正在尝试使用约束传播来实现解决方案,以提高标准递归回溯算法的效率,但遇到以下错误:
File "C:\Users\danisg\Desktop\coloring\Solver.py",
line 99, in solve
for color in self.domains[var]:
RuntimeError: Set changed size during iteration
Run Code Online (Sandbox Code Playgroud)
在这里,对于每个顶点,我set为该特定顶点保留一些可能的特定值:
self.domains = { var: set(self.colors) for var in self.vars }
Run Code Online (Sandbox Code Playgroud)
在我进行赋值后,我将此约束传播到相邻域,以限制搜索空间:
for key in node.neighbors: # list of keys corresponding to adjacent vertices
if color in self.domains[key]: # remove now to prune possible choices
self.domains[key].remove(color)
Run Code Online (Sandbox Code Playgroud)
这不是抛出实际错误的地方(在我的代码中,我指出了try-except块中问题的位置),但可能是问题的根源.
我是否有正确的想法,如果不是正确的实施?更重要的是,我该如何解决这个问题?另外,是否有必要保留一个单独的domains字典?或者我们可以domain在图中创建每个节点的属性吗?
这solve是调用此代码的函数:
def solve(self):
uncolored = [var for var in self.vars if self.map[var].color …Run Code Online (Sandbox Code Playgroud) 我是django的新手,还有一个我希望在线发布的小项目.是否可以将我的网站作为github项目页面托管,还是必须使用像OpenShift这样的服务?
Python具有最大递归深度,但没有最大迭代深度.为什么递归受限制?像迭代这样处理递归是不是更自然,而不是限制递归调用的数量?
我只想说这个问题的根源来自于尝试实现一个流(有关流的更多详细信息,请参阅此问题).例如,假设我们要编写一个流来生成自然数:
def stream_accum(s, n): # force the stream to a list of length n
def loop(s, acc):
if len(acc) == n:
return acc
hd, tl = s()
return loop(tl, acc + [hd])
return loop(s, [])
def nats():
def loop(n):
return n, lambda: loop(n+1)
return loop(1)
Run Code Online (Sandbox Code Playgroud)
流的递归定义非常吸引人.但是,我想更好/更pythonic的方法是使用发电机.
从git对象模型,文件和文件夹通过sha1哈希保存到.git文件夹中的位置.
git如何在内部知道文件是否已被删除,添加或编辑(具体来说,它如何计算您在键入时看到的更改git status)?系统是否完全从sha1中确定此信息?
我试图通过建模银行来了解演员模型的工作原理.首先,这里有一些代码说明了为什么我们需要并发系统的模型:
import time
from threading import Thread
bank = {'joe': 100}
class Withdrawal(Thread):
"""
Models a concurrent withdrawal for 'joe'. In this example, 'bank'
is a shared resource not protected and accessible from any thread.
Args:
amount (double) how much to withdraw
sleep (bool) config to sleep the thread during the withdrawal
"""
def __init__(self, amount, sleep = False):
self.amount = amount
self.sleep = sleep
Thread.__init__(self)
def run(self):
"""
Overrides method in Thread.
Returns: void
"""
balance = …Run Code Online (Sandbox Code Playgroud) 我有一些递归回溯代码,在测试之前测试选择是否有效.将is_legal_choice函数嵌套在递归solve函数中是不是一个坏主意?每次solve调用函数时都会重新定义这个内部函数吗?
假设我有一个Counter代表单词集合的对象:
>>> words = ['hello', 'hello', 'hello', 'world']
>>> counter = Counter(words)
Run Code Online (Sandbox Code Playgroud)
找出哪些单词计数为 1 的一种方法是迭代counter:
for word, count in counter.items():
if count == 1:
print(word)
Run Code Online (Sandbox Code Playgroud)
有没有更简单/更好的方法来做到这一点?也就是说,可以“反转”counter给出计数为 的单词吗x?
我想将一个子类的__str__实现添加到基本实现中:
class A:
def __str__(self):
return "this"
class B(A):
def __str__(self):
return super(B, self) + " + that"
Run Code Online (Sandbox Code Playgroud)
但是,这会产生类型错误:
TypeError:+:'super'和'str'的不支持的操作数类型
有办法获得str(B())回报"this + that"吗?
假设我们想要一个具有完全实例的n 0/ 1元素列表.有没有一行理解或更多pythonic方式来做到这一点比以下?k1
def random_include(n, k):
ret = []
to_include = set(random.sample([i for i in range(n)], k))
for i in range(n):
if i in to_include:
ret.append(1)
ret.append(0)
Run Code Online (Sandbox Code Playgroud) 我有一个Recipe具有一些DurationField属性的模型:
class Recipe(models.Model):
# ...
prep_time = models.DurationField(default=timedelta())
cooking_time = models.DurationField(default=timedelta())
total_time = models.DurationField(default=timedelta())
Run Code Online (Sandbox Code Playgroud)
在django管理员界面上,我可以编辑这三个属性的秒字段。有什么方法可以限制管理员用户仅能编辑小时/分钟DurationField?我在这里真的不需要这种粒度级别,并且想知道是否存在将时间单纯地存储为浮点数然后转换为我的视图的替代方法。