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

前端 未结 3 1442
天命终不由人
天命终不由人 2021-01-23 17:18

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 ast

相关标签:
3条回答
  • 2021-01-23 17:51

    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 )
    
    0 讨论(0)
  • 2021-01-23 17:55

    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.

    0 讨论(0)
  • 2021-01-23 18:01

    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']
    
    0 讨论(0)
提交回复
热议问题