2017-08-26 48 views
1

我需要遍歷我的列表,這是單詞,並在循環中增加兩次。通過第一個增量我保存單詞l和第二增量我保存標記在在i + 1處存在。我需要使用單個變量迭代循環,這是我在這裏。但它給了我一個錯誤:列表索引超出範圍。如何增加兩次沒有錯誤的列表索引超出範圍

i=4  
    while i<len(words): # this loop store words of a file in an array 
      l=lemmatizer.lemmatize(words[i]) #array of words is lematized here 
      print(l) 
      i +=1 
      m=words[i] 
      print(m) 
      if result!=0: 
      #do something 
      else: 
       #do something 
      i+=1 
+1

1:for循環更適合在這裏使用。 2:你不需要增加兩次,只需使用i和i + 1作爲索引。 3:循環條件應該是i Stefan

+0

當我使用單詞[我+ 1]它給了我一個列表索引超出範圍的錯誤。 – Nisa

+0

請參閱下面的解決方案。我剛剛注意到,你從i = 4開始,是對的嗎?記住數組從i = 0開始,所以如果我理解你的數據是正確的,那麼第一個字是0,第一個標記是1。 – Stefan

回答

2

這不是測試,但這裏有雲:

while i<len(words)-1: # this loop store words of a file in an array 
     l=lemmatizer.lemmatize(words[i]) #array of words is lematized here 
     print(l) 

     m=words[i+1] 
     print(m) 
     if result!=0: 
     #do something 
     else: 
      #do something 
     i+=2 

- 我認爲一個for循環會更好這裏,但 而工作了。

+0

工作就像一個魅力..謝謝:) – Nisa

0

在python中使用while循環遍歷列表通常不是最好的方法。在你想要一次取出2個元素的情況下,我會嘗試執行類似zip(words[::2], words[1::2])的操作來獲取單詞對的迭代器。你可以在你的代碼像這樣使用:

for l, m in zip(words[::2], words[1::2]): 
    # do something with l and m 

注意,當詞語具有不平坦的長度,這將不使用的最後一個元素,如果你更願意爲這最後的元素,你可以使用itertools.zip_longestzip_longest(words[::2], words[1::2], fillvalue='defaultvalue')的默認值。

+0

不錯的解決方案,但可能不容易理解爲初學者 – Stefan

相關問題