【问题标题】:Index out of bound error for comparing adjacent numbers in list比较列表中相邻数字的索引越界错误
【发布时间】:2018-10-30 13:47:28
【问题描述】:

列表项

for i in num_list:
    if(i < len(num_list) - 1 and num_list[i] == num_list[i+1]):
        count = count + 1 
    else:
        count = count 

我在 if 条件下遇到索引超出范围错误。错误是什么?我在 if 条件下使用了 len

【问题讨论】:

  • 在发布之前请花时间正确格式化和缩进您的代码 - 特别是使用 python。
  • i 不是元素的索引,而是元素本身。使用for i in range(len(num_list)):。另外,else: count = count 毫无意义。
  • 关于i &lt; len:如果i(记住:元素,而不是索引)为负数,仍然可能出现错误。

标签: python indexoutofboundsexception


【解决方案1】:

您的问题是 i 值不是列表的索引,而是列表中正在迭代的实际项目。

循环中的 else 语句也不是必需的,因为它不会改变任何东西。

我认为这可以满足您的要求:

count = 0
num_list = [1, 2, 3, 3, 2, 1, 1]

for i in range(len(num_list) - 1):
    if(num_list[i] == num_list[i + 1]):
        count += 1 

print(count)
# Output: 2

range(len(num_list) - 1) 将遍历除列表中最后一个索引之外的所有索引。因此,不需要进行 if 检查以确保它没有越界。

【讨论】:

  • 谢谢卡尔! @卡尔
【解决方案2】:
for i in num_list:

不迭代长度/范围,而是迭代值。 例如

num_list = [3,4,1,5,3]
for i in num_list:
    print(i)

会输出

3
4
1
5
3

相反,您希望遍历索引,在这种情况下,您的 foror 循环应该如下所示:

for i in range(len(num_list)):

下面的代码在哪里

num_list = [3,4,1,5,3]
for i in num_list:
    print(i)

会输出

0
1
2
3
4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 2015-03-22
    • 1970-01-01
    • 2011-12-13
    • 2014-07-06
    • 2013-10-13
    相关资源
    最近更新 更多