2016-11-27 3 views
0

初心者の方にはごめんなさい - このコードを実行すると、一度印刷するのではなく出力を2回印刷してからループの次の繰り返しに進みます。私はこれが単にフォーマットエラーであると確信していますが、私はそれを見つけることができないようです...ありがとう!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が最初である場合には動作しますか最後の要素。

また、タプル(prev, current, next)を反復するためにenumeratezipを使用することができます。

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

これは素晴らしい作品 - ありがとうございました! –

関連する問題