我正在尝试为一个小程序编写代码,该程序将列表作为输入并返回一个布尔值,指示是否存在任何连续重复的数字(该列表必须至少包含2个元素)。我一直收到以下错误:
IndexError: list index out of range.
非常感谢任何有关如何解决这个问题的建议!
def two_length_run(n):
i = 0
while i < len(n):
if len(n) >= 2:
if (n[i] == n[i + 1]) and (n[i + 1] <= len(n)):
return True
else:
i = i + 1
else:
return False
答案 0 :(得分:1)
k
的列表具有索引0:(k-1),但是您的测试允许i+1
运行到k
的值,这会导致您的访问超出范围。 新检查:记下从<=
到<
的更改,并撤消订单。
if i + 1 < len(n) and n[i] == n[i+1]:
“短路”确保如果第一个条件为假,则不会评估第二个条件。
使用for
循环可以更轻松地完成此操作,这有助于将您的idex保持在界限内:
if len(n) >= 2:
for i in range(len(n)-1):
if n[i] == n[i + 1]:
return True # Exit early if you find a pair
return False
答案 1 :(得分:1)
我会这样写:
def two_length_run(n):
if not n or len(n) < 2:
return False
for i in xrange(len(n) - 1):
if n[i] == n[i+1]:
return True
return False
在开始迭代和使用xrange之前进行检查(快速退出),而不是手动递增“i”。
答案 2 :(得分:0)
def two_length_run(n):
i = 0
while i < len(n):
if len(n) >= 2:
if (i + 1 < len( n )) and ( n[i] == n[i + 1]) and (n[i + 1] <= len(n)):
return True
else:
i = i + 1
else:
return False
当i = len(n) - 1时,由于i + 1,内部if条件可能会溢出,所以在那里添加一个检查。
答案 3 :(得分:0)
您的循环检查当前索引和下一个索引,因此while
条件不正确。
而不是
while i < len(n):
if len(n) >= 2:
使用
if len(n) > 1:
while i < len(n) - 1:
if n[i] == n[i + 1]:
return True
i = i + 1
# Checked every index of n without a duplicate
return False
将避免此索引错误。
答案 4 :(得分:0)
你得到的答案似乎是正确的。但是,我认为将条件放在while语句中会更清晰。
def two_length_run(n):
i = 0
while i < len(n) - 1:
if len(n) >= 2:
if (n[i] == n[i + 1]) and (n[i + 1] <= len(n)):
return True
else:
i = i + 1
else:
return False
我认为应该有效