我试图使用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)
我想也许长度太长但无济于事。
答案 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...