我正在尝试删除列表中重复的单词,它会将位置和单词保存在文件中,但它不会保存重复单词后出现的单词。有人能告诉我它有什么问题吗?
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()
答案 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
中的每个项目复制到新列表中。如果省略括号和冒号,则只需复制对整个列表的引用,这不是您想要的。