我有以下列表:
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]不是全文。
我试图搞清楚这个问题,但没有人在看我的代码,并给我反馈,所以我可能会有一些人可能会提供帮助。如果您发现错误,请告诉我在哪里。 感谢任何帮助!
答案 0 :(得分:2)
几个问题:
'NM'
。这里更简单的方法可能是迭代列表索引而不是项目:
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") + ": ")
请注意,我只是使用NM...
的结果替换 input()
个项目。这比插入和删除元素更有效。
答案 1 :(得分:2)
错误来自 here :
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: ')