2013-11-02 98 views
2

我有以下列表:操作與列表

Words = ['This','is','a','list','and','NM,'] 

注:字[5] >>> NM,(用逗號())

New_List = [] 
for word in Words: 
    if word[:2] =="NM": 
     Words.insert((Words.index("NM")),input("Input a " + ac_to_word("NM") + ": ")) 
     Words.remove("NM") 

每當我嘗試運行這個我得到:

Words.insert((Words.index("NM")),input("Input a " + ac_to_word("NM") + ": ")) 
ValueError: 'NM' is not in list 

然而,「NM」是在索引5中。這裏發生了什麼?我要求的是單詞[:2]而不是整個單詞。

我試着找出問題所在,但沒有人會看我的代碼,並給我反饋,所以我雖然也許有些人在那裏可能會有幫助。如果你看到一個錯誤,請告訴我在哪裏。 任何幫助表示讚賞!

+1

是不是錯誤的信息完全清楚了嗎?你試圖從'Words'列表中得到一個字符串'NM'的索引,但它不在那裏。 'NM'!='NM,'。 –

+0

那麼,「NM」不在列表中,你期望什麼? – sashkello

+0

迭代時不要修改列表 –

回答

2

幾個問題:

  1. 你試圖在沒有這樣的項目的列表來訪問字符串'NM'
  2. 在迭代它時正在修改列表。不要這樣做!它會產生意想不到的後果。

這裏有一個更簡單的方法很可能是遍歷列表索引,而不是項目:

Words = ['This','is','a','list','and','NM,'] 
for i in xrange(len(Words)): 
    if Words[i].startswith('NM'): 
     Words[i] = input("Input a " + ac_to_word("NM") + ": ") 

請注意,我只是input()結果替換NM...項目。這比插入和刪除元素更有效。

2

錯誤來自這裏來:

Words.index("NM") 

'NM'不是in你的字符串列表。

在迭代時對序列執行插入和刪除操作是一個糟糕的主意。這是跳過項目或雙重操作項目的絕對方法。另外,您不應該使用index進行線性搜索,因爲a)速度慢並且b)如果您有重複項會發生什麼情況?

只需使用enumerate

for i,word in enumerate(words): 
    if word[:2] == 'NM': 
     words[i] = input('replace NM with something: ') 
+0

爲什麼如此多的反對票? –