试图删除列表python中重复的单词

时间:2017-03-16 15:43:06

标签: python list words

我正在尝试删除列表中重复的单词,它会将位置和单词保存在文件中,但它不会保存重复单词后出现的单词。有人能告诉我它有什么问题吗?

sen = input("Input a sentence")
sen1 = sen.lower()
sen2 = sen1.split()
sen4 = sen2
f = open("newfile.txt", "w+")
for words in sen2:
    print(words)
    ok = sen1.count(words)
    print(ok)
    sent = sen4.index(words)
    print(sent)
    f.write(str(sent))
    f.write(str(words))
    if ok > 1 :
        while ok > 0:
            sen2.remove(words)
            ok = ok-1
            if ok == 0:
                break
f.close()

1 个答案:

答案 0 :(得分:2)

您正在犯一个常见错误,在循环其项目时修改列表。

在循环for words in sen2:内部,有时会执行sen2.remove(words),这会修改列表sen2。当你这样做时发生了奇怪的事情。

要避免这种情况,请使用sen2制作列表sen2copy = sen2[:]的深层副本,并循环其中一个并修改另一个。你可以用

做到这一点
sen2copy = sen2[:]
for words in sen2copy:

或者,如果你想简短,

for words in sen2[:]:

如果您不理解符号,sen2[:]从开头到结尾都是sen2的一部分。换句话说,它会将sen2中的每个项目复制到新列表中。如果省略括号和冒号,则只需复制对整个列表的引用,这不是您想要的。