我遇到的问题出在函数arrangeNodes() 中。它似乎为我作为争论传递给它的 dict 添加了无关的值。dict 'stops' 是通过使用 'foo' 中特定范围内的值来填充的。我在下面展示了 foo 中任何时候的最大值为 3。由于该函数在 dict 中的键上迭代一次,因此每个键仅在第一个 for 循环和第二个 for 循环中使用一次,与键关联的集合最多只能包含 3 个值。
但是在函数执行后,我突然在 dict 的每个集合中有超过 3 个值
#!/usr/bin python
from collections import deque
d_min = int(raw_input())
d_max = int(raw_input())
def arrangeNodes(keys, stops):
foo = deque()
for r in keys:
k = r + d_max
while len(foo) and k < foo[0]: foo.popleft()
for num in foo:
if d_min <= num - r <= d_max: stops[r].add(num)
else: break
foo.append(r)
return
ans = 0
motels = {}.fromkeys([7000, 6010, 5990, 5030, 4970, 4060, 3930, 3060, 2940, 2030, 1970, 1010, 990, 0], set())
motels.update({}.fromkeys((int(raw_input()) for _ in xrange(int(raw_input()))), set()))
print motels #All sets in this dict are empty before the function call
arrangeNodes(sorted(motels.iterkeys(), reverse=True), motels)
for v in motels:
print v, motels[v]
样本输入:970、1040、0
使用此输入,容器“foo”的最大长度不应超过 3。以下是函数中每次迭代的 foo 中的值:
deque([])
deque([7000])
deque([7000, 6010])
deque([6010, 5990])
deque([6010, 5990, 5030])
deque([5030, 4970])
deque([4970, 4060])
deque([4060, 3930])
deque([3930, 3060])
deque([3060, 2940])
deque([2940, 2030])
deque([2030, 1970])
deque([2030, 1970, 1010])
deque([1010, 990])
因此,dict 'motels' 包含的集合中的值不应超过 3 个。但是每当我运行这个程序时,当我在函数执行后打印 motel 时会得到以下输出:
0 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
5990 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
5030 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
2940 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
4970 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
1010 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
2030 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
1970 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
3060 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
7000 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
6010 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
4060 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
3930 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
990 set([5990, 5030, 2940, 4970, 1010, 2030, 1970, 3060, 7000, 6010, 4060, 3930, 990])
我不明白为什么会这样。有人可以解释吗?