长度不正确导致int无法迭代错误

时间:2018-01-05 14:15:34

标签: python python-2.7 matrix

我试图使用lattice函数随机循环一个名为randrange的矩阵。我的矩阵是8x8,打印很好。但是,当我尝试随机循环遍历此矩阵的每个元素时,我收到错误

  

' TypeError:' int'对象不可迭代'

由于范围的上限len(mymatrix)。我不确定为什么会这样。

   for R1 in randrange(0, (len(lattice)):
        for R2 in randrange(0, len(lattice)):
            H = -j*lattice[R1,R2]*(lattice[R1+1,R2],lattice[R1-1,R2], lattice[R1,R2+1],lattice[R1,R2-1]) +h*lattice[R1,R2]
            H_flip = -j*-1*mymatrix[R1,R2]*(lattice[R1+1,R2],lattice[R1-1,R2], lattice[R1,R2+1],lattice[R1,R2-1]) +h*lattice[R1,R2]
    print lattice[R1,R2]

之前我没有在循环中使用randrange,是否可以使用与使用范围相同的方式?我还尝试将范围设置为:

for R1 in randrange(0, len(lattice)-1)

我想也许长度太长但无济于事。

2 个答案:

答案 0 :(得分:0)

方法randrange不会返回范围,而是随机选择的元素,而不是doc中可以读取的。

  

random.randrange(start, stop[, step])

     

range(start, stop, step)返回随机选择的元素。这相当于choice(range(start, stop, step)),但实际上并不构建范围对象。

这就是为什么你得到一个TypeError,你确实试图循环int

我不建议在您的列表中以随机顺序循环,但如果结果是必要的话,我会使用shuffle

from random import shuffle

# shuffle mutates your list so we need to do the following
rows, cols = range(len(lattice)), range(len(lattice))
shuffle(rows)
shuffle(cols)

for R1 in rows:
        for R2 in cols:
            # ...

请注意,在Python3中,您需要先将range投射到list

答案 1 :(得分:0)

你是对的。 randrange()返回给定范围内的单个元素。另一方面,range()返回元素列表,因此是可迭代的。

您可以尝试这样的事情:

stop = randrange(0, len(lattice)-1)
start = randrange(0, stop)
for R1 in randrange(start, stop):
     for...