2017-10-04 36 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()。這會將一個隨機數與每個矩形相關聯,並讓您訪問每組兩個連續的數字/矩形對。