给定一个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
。如果有人能够解释为什么会发生这种情况,那么我们将不胜感激。
答案 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