列表索引超出范围,但我重置了索引(Python)

时间:2013-09-21 17:11:24

标签: python

我已经编程了大约1周。

我正在编写一个简单的程序来遍历此List并每次将变量递增1。

我收到错误:列表索引超出范围。

我相信这是因为我的指数值太高了? 但我在使用以下内容之前重置索引值:

        index += 1
        index and 7

逻辑AND应该在索引变为> = 8时将索引重置为0,不是吗?

在这种情况下,我不明白出了什么问题。请看我的代码:

lookups = [0,1,2,3,4,5,6,7]
index = 0
dword_C06748 = 0

count = 0

offset1 = 0
rn_offset = 0


def next_value():
    global lookups, index, count
    while count < 18:
        lookups[index] += 1
        index += 1
        index and 7
        count += 1

next_value()

5 个答案:

答案 0 :(得分:3)

index and 7未重置index。它只是评估一个未保存的布尔值。所以这个陈述没有效果。

请改用index = index % 8。这样可以确保索引始终低于8。

或者您可以使用

 index = index % len(lookups)

答案 1 :(得分:2)

and在python中是布尔AND,使用&进行逐位AND:

index &= 7  #index = index & 7

由于整数是不可变的,因此您应该将结果重新分配回index

答案 2 :(得分:1)

我想你想要

&

而不是

and

查看此资源:http://www.tutorialspoint.com/python/python_basic_operators.htm

祝你好运学习:)。

答案 3 :(得分:1)

我建议你使用:

if index >= 8:
    index = 0

index = index % 8 

或使用inplace modulo operator

的替代方法
index %= 8

正如它在Python的Zen中所说(打开一个Python窗口并输入import this),可读性很重要。 这些选项比代码的更正版本更具可读性,使用按位and代替,因此您应该使用它们。

答案 4 :(得分:1)

我认为以下内容将以更加pythonic的方式复制代码的输出:

lookups = [0,1,2,3,4,5,6,7]

def next_value():
    # xrange returns the value 0, 1, ... 17
    for count in xrange(18):   # or just range if you are using py3
        # the mod makes sure the index is always less than 8
        lookups[count % 8] += 1

next_value()