【问题标题】:Check if a certain sequence of numbers appears in an array. What's wrong with my thoughts?检查某个数字序列是否出现在数组中。我的想法有什么问题?
【发布时间】:2018-05-16 14:29:51
【问题描述】:

我正在学习 Python 的基础知识并做一些手指练习。这个问题让我很困惑。我不知道我哪里做错了。问题是这样的:

给定一个整数数组,如果数字序列 1、2、3 出现在数组中的某个位置,则返回 True。

我的解决办法是:

def array123(nums):
  arr1 = [1, 2, 3]
  if len(nums) < 3:
    return False
  for i in range(len(nums)-2):
    if nums[i:i+3] == arr1:
      return True
    else:
      return False

我意识到这会给我 False 只要前 3 个字符,所以我将其更改为:

def array123(nums):
  arr1 = [1, 2, 3]
  if len(nums) < 3:
    return False
  for i in range(len(nums)-2):
    print(nums[i:i+3])
    if nums[i:i+3] == arr1:
      return True
  return False

这次成功了。我想知道我是否必须将“return False”移出最后一个 if 的子代码部分?

谢谢。

【问题讨论】:

  • 如果第一个元素不是 1, 2, 3,您的初始解决方案将立即失败,并返回 False 而不检查列表的其余部分。你的第二种方法是正确的。您还有其他问题吗?
  • 不,我只是觉得将其移出循环会使代码看起来不那么整洁。但我想这是要走的路。

标签: python arrays function


【解决方案1】:

当你写作时

if nums[i:i+3] == arr1:
      return True
    else:
      return False

如果条件不满足,则函数停止执行并返回False

相反,您希望函数继续执行直到它找到满足该条件的三元组。

【讨论】:

  • 乐于助人。请记住,如果您觉得有帮助,您可以接受答案
【解决方案2】:

是的。

在第一个解决方案中,如果前 3 个整数不是您正在寻找的,您将停止。那不是你想要的。您想继续前进并尝试其他地点。

当你将它移出循环时,只有在你检查了所有位置并且它们都不匹配后才会返回 false。

【讨论】:

  • 非常感谢。我想知道是否有办法做到这一点,而无需将那部分移出循环。但现在我发现,从逻辑上讲,将其排除在循环之外更有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
相关资源
最近更新 更多