如果数组直接与另一个数组相邻,则返回True 2

时间:2016-10-29 01:19:55

标签: python arrays algorithm list python-3.x

给定一个int数组,如果数组在某个地方的2旁边包含2,则返回True。

has22([1,2,2])→True

has22([1,2,1,2])→False

has22([2,1,2])→False

我的尝试是:

def has22(nums):
    if 2 in nums:
        if (nums[nums.index(2) + 1] == 2):
            return True
        elif (nums[nums.index(2) - 1] == 2):
            return True
        else:
            return False
    else:
        return False

结果为Error: list index out of range。如果有人能够解释为什么会发生这种情况,那么我们将不胜感激。

4 个答案:

答案 0 :(得分:2)

首先,pairwise()。然后:

any(x == y == 2 for (x, y) in pairwise(seq))

答案 1 :(得分:0)

我喜欢pairwise这个想法,而这里是其他没有导入任何内容的

.index

你的代码的问题是,当2是第一个或最后一个元素时,它不仅会失败,当2s对不是前2个时,它也会失败,例如[1,2,3,2] ,2]因为border-radius: 10px 0 0 0; border-radius: 0 10px 0 0; border-radius: 0 0 10px 0; border-radius: 0 0 0 10px; 只给你第一个2的第一个位置。

解决方案很简单,请求一个你知道会在那里的索引,如上面的例子所示,从1开始询问所有索引和前一个索引,这样在第一次请求索引0和1时, 1和2,等等

答案 2 :(得分:0)

如果输入很小sequence

any(a == b == 2 for a, b in zip(seq, seq[1:]))

答案 3 :(得分:0)

这是解决方案

def has22(a, i = 0):
  if(i < len(a) - 1):
    if(a[i] == 2 and a[i+1] == 2):
      return True
    return has22(a, i + 1)
  return False