2

我有以下列表:

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

注意: Words[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。这是怎么回事?我要的是 word[:2] 而不是整个词。

我试图找出问题所在,但周围没有人查看我的代码并给我反馈,所以我想也许有些人可以提供帮助。如果您发现错误,请告诉我在哪里。任何帮助表示赞赏!

4

2 回答 2

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") + ": ")

请注意,我只是将项目替换为. 这比插入和删除元素更有效。NM...input()

于 2013-11-02T07:00:17.803 回答
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: ')
于 2013-11-02T07:03:19.627 回答