SPY GAME函数疑问:为何收集到[0,0,7]后仍继续添加元素?
SPY GAME 代码问题解析
你的问题核心出在内层while循环的判断条件和执行逻辑上:
当mynewlist已经收集到3个元素(也就是[0,0,7])时,len(mynewlist)等于3,满足len(mynewlist)<=3的条件,所以内层while循环依然会执行。这时候遍历到列表后面的0时,i==0的判断成立,就会把这个额外的0追加到mynewlist里,导致最终结果变成[0,0,7,0]。
把判断条件改成len(mynewlist)<=2后,当mynewlist长度达到3时,条件不成立,内层while循环直接跳过,自然不会处理后续的元素,也就不会多追加0了。
另外你的代码里内层while其实完全没必要——因为每个分支都有break,while循环本质上只执行一次,不如直接换成if判断,还能在收集到足够元素时直接终止外层循环,优化效率:
def spy_game(nums): mynewlist = [] for i in nums: if len(mynewlist) >= 3: break # 已经凑够007,不用继续遍历了 if i == 0 or i == 7: mynewlist.append(i) return mynewlist == [0,0,7]
内容的提问来源于stack exchange,提问作者Rey
相关产品推荐
相关产品推荐

