2017-10-04 91 views
0

这可能是一个简单的任务,但我不确定如何在Python中实现这一点。Python for two dimensional index上的循环

我有一个for循环在Python中的索引上执行。我在循环遍历for循环的每次迭代中定义了一个唯一的值。

我想获取NEXT或PREVIOUS for循环唯一值的值。例如,我有:

counter = 0 

for rect in rects: 
    randomnumber = random.randint(1,101) 
    if counter < len(rects)-1: 
     if rects[counter] - rects[counter+1] 
      pastrand = {get random value from PREVIOUS loop iteration} 
      randsubtract = randomnumber - pastrand 

所以我怎么从一个(或下)迭代Python中当前迭代使用随机数?例如:

randomnumber in rects[0] 
    randomnumber in rects[1] 

如何从for循环中的迭代调用特定值?

回答

1

其在尾盘,但是这可能会做你..

counter = 0 
random =[] 
for rect in rects: 
    randomnumber = random.randint(1,101) 
    random.append(randomnumber) 
    if counter < len(rects)-1: 
     if rects[counter] - rects[counter+1]: 
     pastrand = random[-1] 
     randsubtract = randomnumber - pastrand 
+1

好吧,我一直在盯着这种方式太久了 - 甚至没有发生过,我可以将当​​前的随机数索引到一个新的索引中,并将[counter]作为迭代!谢谢。这工作! – freeflow488

1

选项1
使用enumerate。如果你想要当前和下一个,你需要迭代到len(rect) - 1。如果你想以前和当前,你就需要开始从1

for i, r in enumerate(rects[:-1]): 
    cur = r 
    next = rects[i + 1] 

或者迭代,

for i, r in enumerate(rects[1:]): 
    prev = rects[-1] 
    cur = r 

选项2
您可以使用zip相同的效果:

for cur, next in zip(rect, rect[1:]): 
    ... 
+1

如果超出界限,他将不得不错误处理? –

+1

@MikeTung整个'如果你想要当前和下一个,你需要迭代直到len(rect)-1。如果你想要以前和当前,你需要从1开始迭代。越界。 –

1

书面,你可以指定一个新的之前保存从以前的循环迭代值。

for ...: 
    pastrand = randomnumber 
    randomnumber = ... 

当然,你将不得不在循环开始之前,这样的分配通过作品的第一次分配的东西randomnumber

另一种方法是循环使用的随机数,而不是每个循环迭代计算一个随机数。为此,您可以使用pairwise()工具,其工具在itertools documentation或在more-itertools package。循环切换对随机数可以做这样的:

for rand1, rand2 in pairwise(repeatfunc(random.randint, None, 1, 101)): 
    ... 

,我已经用另一种itertool,repeatfunc(),重复调用randint()。 (您也可以在不使用repeatfunc()的情况下执行此操作。)除了第一个循环外,在此循环的每次迭代中,rand1将等于先前迭代中的rand2

现在,你要将每个随机数与一个矩形进行配对(假设这就是rects),对吗?你可以使用zip()。具体来说,zip(random_numbers, rects)是一个随机数和矩形元组的迭代器。你可以使用它像这样:

for randomnumber, rect in zip(random_numbers, rects): 
    ... 

,但你会想遍历对,所以你把pairwise与:

for r1, r2 in pairwise(zip(random_numbers, rects)): 
    rand1, rect1 = r1 
    rand2, rect2 = r2 
    ... 

这里random_numbers可能是事我前面有没有repeatfunc()。这会将一个随机数与每个矩形相关联,并让您访问每组两个连续的数字/矩形对。