【问题标题】:Codingbat Warm-up exercise array123Codingbat 热身练习数组123
【发布时间】:2023-03-21 12:42:01
【问题描述】:

我是编程新手,我正在尝试从 codingbat.com 了解这个解决方案。

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

这是解决方案:

def array123(nums):
  # Note: iterate with length-2, so can use i+1 and i+2 in the loop
  for i in range(len(nums)-2):
    if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
      return True
  return False

但是为什么要使用 (len(nums)-2) 呢?它与我们开始 for-in 循环的位置有关吗?

我好像在网上找不到答案,希望有人能帮忙。

【问题讨论】:

  • 你明白range()是做什么的吗?
  • 这与循环开始的位置无关。这是循环结束的地方。
  • 我了解范围的作用,抱歉我无法理解为什么我希望它以 -2 结尾,如:array123([1, 1, 2, 3, 1]) 然后它会通过在 3 处停止的循环(即 -2)运行吗?
  • 对,但是如果你删除了-2,那么范围会在什么时候结束呢?请注意,在循环中,代码 2 添加到i
  • 哦,所以它最终会增加超过可用数字并且没有要处理的数据!

标签: python arrays for-loop if-statement


【解决方案1】:

循环在len(nums)-2 结束,因为三个 整数不能从数组中的最后三个 项开始。所以对于最后两个数组项没有必要检查是否有序列。

【讨论】:

    【解决方案2】:

    一个稍微不同的解决方案,您不必担心len(nums)-2 问题:

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

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 2014-03-14
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      相关资源
      最近更新 更多