我正在寻找Josephus_problem,但结果不是我的预期。为什么呢?
def J(n,x):
li=range(1,n+1)
k=0
res=[]
while len(li)>1:
k= (x+k-1) % len(li)
li.pop(k)
res.append(li)
#print li
return res
print J(5,3)
预期产出:
[1, 2, 4, 5]
[2, 4, 5]
[2, 4]
[4]
实际输出:
[[4], [4], [4], [4]]
答案 0 :(得分:5)
您需要在此处附加列表副本:
res.append(li[:]) # <-- not res.append(li) !!!
list
是Python中可变数据结构的真正原因。看看这个片段
>>> l = [1,2,3]
>>> p = [l,l,l]
>>> p
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> l.pop()
3
>>> p
[[1, 2], [1, 2], [1, 2]]