使用python循环后退一步和前进一步

时间:2019-03-16 11:17:05

标签: python list loops indexing concatenation

我需要循环访问包含法语单词的列表并找到一个星号,因为每次出现一个星号时,我都希望将星号之前的单词与星号之后的单词连接起来,并继续到下一个。 例如,按以下顺序:

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

我要串联“接合”和“ ment”,并且输出(接合)应由字典检查。如果在字典中,请追加到列表中。

使用我的代码,我只会得到星号:

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

3 个答案:

答案 0 :(得分:3)

Python的方法不是思考“时间旅行”(即来回走动),而是考虑功能性(时间旅行在资源非常有限的环境中存在)。

一种方法是按照@Yosufsn所示进行枚举。另一个方法是zip与列表一起使用,但在任一侧都添加填充。像这样:

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 )

答案 1 :(得分:1)

我认为您需要一个像这样的简单代码:

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

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

输出:

"engagement"

使用此输出,您可以随后查看字典。

答案 2 :(得分:0)

我想知道如何管理这样的列表(废话):

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

所以我给你提供了这样的方法:

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]

哪个返回:

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