【发布时间】:2020-01-08 01:10:02
【问题描述】:
所以我写了这个算法,给定一组整数,它会删除除 0 和 7 之外的所有整数,然后它会检查剩余的整数是否按特定顺序,然后返回一个布尔值。代码如下:
def spy_game(nums):
for i in nums:
if i != 0:
if i == 7:
continue
else:
nums.remove(i)
else:
continue
stringlist = [str(o) for o in nums]
mystring = ''.join(stringlist)
return '007' in mystring
spy_game([1,0,2,4,0,7,5])
现在的问题是,如果我运行
(例如)spy_game([1,0,2,4,0,7,5]) 它不会返回True,无论是否存在感兴趣的序列。在我决定在过滤过程之后返回列表本身之后,我发现除了中间的数字之外的所有数字都被过滤掉了。所以在这个例子中,如果我 return nums 它将返回 [0, 4, 0, 7] 尽管 4 应该已经被删除。我知道这个算法有更多的最佳替代方案,但我只是想了解它为什么不起作用。谢谢你。
【问题讨论】:
-
您可能需要修复缩进,因为代码无法正常工作
-
代码不起作用,因为您在迭代 nums 数组本身时对其进行了更新,请使用另一个数组从中删除内容。就像假设您的循环 i 值为 0,并且您的第一个元素在第 0 处为 1,现在当您删除它时,i 变为 1 而不是在 1 处我们的值为 2,因为删除 1 后,我们的数组变为 - [0, 2,4,0,7,5].
-
@zenwraight 考虑把它写成答案,很好地解释了
-
@Jimmar 你已经这样做了,所以赞成:)