列表操作

时间:2013-11-02 06:54:38

标签: python python-2.7 python-3.x

我有以下列表:

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]不是全文。

我试图搞清楚这个问题,但没有人在看我的代码,并给我反馈,所以我可能会有一些人可能会提供帮助。如果您发现错误,请告诉我在哪里。 感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

几个问题:

  1. 您正尝试访问列表中没有此类项目的字符串'NM'
  2. 您在迭代时修改列表。不要这样做!这将产生意想不到的后果。
  3. 这里更简单的方法可能是迭代列表索引而不是项目:

    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: ')