2016-11-27 48 views
0

對不起,對於初學者問題 - 在運行此代碼時,它會輸出兩次而不是打印一次,然後繼續下一次迭代。我相信這只是一個格式錯誤,但我似乎無法發現它...謝謝!Python - 獲取列表中的前一個和下一個元素後重復打印

myList = [1, 1, 1, 0.5, 1, 1, 2, 1, 0.5, 1, 3] 

for thisThing in myList: 
    baseIndex = myList.index(thisThing) 

    if thisThing == 0.5: 
     get_previous = myList[baseIndex - 1] 
     get_next = myList[baseIndex + 1] 

     T2 = thisThing * 2 
     if T2 == get_previous and T2 == get_next: 
      print("Success at index " + str(myList.index(thisThing))) 
      continue 

OUTPUT: 
Success at index 3 
Success at index 3 

回答

1

index返回給定項目的第一次出現的索引,在此情況下3。你可以通過改變它迭代指數,而不是修復代碼:

myList = [1, 1, 1, 0.5, 1, 1, 2, 1, 0.5, 1, 3] 

for baseIndex in range(1, len(myList) - 1): 
    thisThing = myList[baseIndex] 

    if thisThing == 0.5: 
     get_previous = myList[baseIndex - 1] 
     get_next = myList[baseIndex + 1] 

     T2 = thisThing * 2 
     if T2 == get_previous and T2 == get_next: 
      print("Success at index " + str(baseIndex)) 

輸出:

Success at index 3 
Success at index 8 

由於上述只會重複索引1 - 8它也將在案件的工作,0.5是第一或最後的元素。

你也可以使用enumeratezip遍歷元組(prev, current, next)

for i, (prev, cur, nxt) in enumerate(zip(myList, myList[1:], myList[2:]), 1): 
    t2 = cur * 2 
    if cur == 0.5 and prev == t2 and nxt == t2: 
     print("Success at index " + str(i)) 
+0

這個偉大的工程 - 謝謝! –

相關問題