go one step back and one step forward in a loop with python

python for loop
python for loop going backwards
python while loop
iterate backwards python
python going backwards
while loop backwards python
how to reverse a list in python using for loop
python list backwards

I need to loop in a list containing french words and find an asterisk because I want to concatenate the word before the asterisk and the word after the asterisk each time an asterisk appear and continue to the next. For example, in the sequence:

['les','engage', '*', 'ment', 'de','la'] 

I want to concatenate 'engage' and 'ment' and the output (engagement) should be checked by a dictionary. If in the dictionary, append to a list.

With my code I only get the asterisk:

import nltk
from nltk.tokenize import word_tokenize
import re


with open ('text-test.txt') as tx:
    text =word_tokenize(tx.read().lower())



with open ('Fr-dictionary.txt') as fr:
    dic = word_tokenize(fr.read().lower())


ast=re.compile(r'[\*]+')
regex=list(filter(ast.match,text))

valid_words=[]
invalid_words=[]

last = None
for w in text:
    if w in regex:
        last=w 
        a=last + w[+1]
        break
if a in dic:
    valid_words.append(a)
else:
    continue

I wondered how to manage a list (nonsense) like this:

words = ['Bien', '*', 'venue', 'pour', 'les','engage', '*', 'ment', 'trop', 'de', 'YIELD', 'peut','être','contre', '*', 'productif' ]

So I came u with a method like this:

def join_asterisk(ary):
  i, size = 0, len(ary)
  while i < size-2:
    if ary[i+1] == '*':
      yield ary[i] + ary[i+2]
      i+=2
    else: yield ary[i]
    i += 1
  if i < size:
    yield ary[i]

Which returns:

print(list(join_asterisk(words)))
#=> ['Bienvenue', 'pour', 'les', 'engagement', 'trop', 'de', 'YIELD', 'peut', 'être', 'contreproductif']

Moving back an iteration in a for loop, for loops in Python always go forward. If you want to be able to move i = 0 while i < 5: print(i) if condition: i=i-1 i += 1. Or even better: continue i+=1. But honestly: I'd step back and think again about your original problem. One implementation of control flow is Python's while loop. You can give it a boolean condition (boolean values are either True or False in Python), and the loop will execute repeatedly until that condition becomes false. If you want to loop forever, all you have to do is start an infinite loop.

Instead of thinking "time travel" (i.e. go back and forth), the Pythonic way would be to think functional (time travel has it's place in very resource constrained environments).

One way is to go the enumeration way as @Yosufsn showed. Another is to zip the list with itself, but with padding appended on either side. Like this:

words = ['les','engage', '*', 'ment', 'de','la'] 
for a,b,c in zip([None]*2+words, [None]+words+[None], words+[None]*2):
    if b == '*':
        print( a+c )

Two steps forward and one step back, Oasis, 5 4 bytes. 1 byte saved thanks to @Adnan 3+23. Not to be confused with 23+3. Try it online! How? implicitly push a(n-1) 3 push 3 + sum and implicitly� While Loop. The while loop is one of the first loops that you'll probably encounter when you're starting to learn how to program. It is arguably also one of the most intuitive ones to understand: if you think of the name of this loop, you will quickly understand that the word "while" has got to do something with "interval" or a "period of time".

I think you need a simple code like this:

words = ['les','engage', '*', 'ment', 'de','la']

for n,word in enumerate (words):
    if word == "*":
        exp = words[n-1] + words[n+1]
        print (exp)

Output:

"engagement"

With this output, you can subsequently check with your dictionary.

Backward iteration in Python, Sometimes we need to go through the elements of a list in backward This value helps us read the list from the last index value also we iterate through steps of -1. We use a for loop with an iterator used as the index of the element in The reversed() function is very straight forward it's simply picks the� I wish to find a way to efficiently imitate the same possible behaviour from the while loops to the for loops, to make the loop "stall" or go back a step if a condition is met. The reason for this is that I'm trying to implement a calculation with a big number of iterations, and the for looping is 4x faster than the while looping, according to

For-Loops and While-Loops — Python Like You Mean It, Moving forward, you will likely find use for these concepts in nearly every piece of demonstrating a basic for-loop total = 0 for item in [1, 3, 5]: total = total + item print(total) If the indented block code is executed, go back to the first step. Python Tutorial - Looping your code back (to the beginning or middle) using a procedure - Duration: 6:29. While Loop in Python - Duration: 12:43. Telusko 494,217 views.

go one step back and one step forward in a loop with python, 问题I need to loop in a list containing french words and find an asterisk because I want to concatenate the word before the asterisk and the word after the asterisk� Python For Loops. A for loop is used for iterating over a sequence (that is either a list, a tuple, a dictionary, a set, or a string).. This is less like the for keyword in other programming languages, and works more like an iterator method as found in other object-orientated programming languages.

7. Iteration — How to Think Like a Computer Scientist: Learning with , Because iteration is so common, Python provides several language features to make it easier. Each item in turn is (re-)assigned to the loop variable, and the body of the Remembering things from one step to the next is precisely why we have in the body (lines 6 and 7) and then go back to the while statement at line 5. The continue statement in Python returns the control to the beginning of the while loop. The continue statement rejects all the remaining statements in the current iteration of the loop and moves the control back to the top of the loop. The continue statement can be used in both while and for loops. Example:

Comments
  • So when concatenated word is found in dictionary, do you want the list to become: ['les','engagement', 'de','la'] or use a different list altogether?
  • I want the list to become ['les','engagement', 'de','la'] but only if the result of the concatenation is in the dictionary, otherwise, append to a different list
  • that's very good! thanks! This solution only joins the word and does not check if the resultant string is in a dictionary...I need to do that because certainly there will be strings joined that are not words since the asterisk represents the end of a paragraph and I want to connect the words that were separated by line breaks.
  • is it possible to check if the result of your concatenation is in a french a dictionary? If so, could you update the code? I have never used Yield so I don't know where to place this check. Thanks
  • Oui, @NatáliaResende. For example add a nested if/else under if ary[i+1] == '*': so, if the joined word is in the dictionary it yields it. Else it yield ary[i] and also yield ary[i+2]
  • could it be better with for a,b,c in zip(['']*2+words, ['']+words+[''], words+['']*2): ? to avoid error in case list begins or ends with a *
  • @PRMoureu: Depends on the desired semantics. If a * at the head or end of a list is expected data, then yes, that would be the right choice. Otherwise it might be desireable an exception to actually be raised.
  • careful if the list begins or ends with a *
  • Thank you very much. My list is much bigger than this one. This list in my post was just to illustrate the problem. Does the code work for a bigger list?
  • @PRMoureu, why did you use 'enumerate'?
  • He did so to obtain an index for each word. enumerate will return (0, 'les'), (1,'engage'),....
  • @PRMoureu, I understand now why you used enumerate. I think this code also works for a bigger list, right?