我正在尝试清除其重复项的文本字段(每个项都在文本字段的新行中)。我的逻辑是:在文本字段上调用get(),插入到列表中,然后运行一系列缓慢的嵌套循环以检查重复项,然后重新填充文本字段。
有人可以帮助评估我的逻辑并告诉我为什么这不起作用吗?
def checkDup(self):
clean = []
dirty = O1.get("1.0", END+'-1c').split("\n")
for i in dirty[1:]:
if i not in clean:
clean.append(i)
clean.append("\n")
O1.delete("1.0", END)
O1.insert(END, clean)
答案 0 :(得分:0)
我本可以使用与for循环相同的逻辑来检查重复项。.也许有更好的方法可以做到这一点,但就目前而言,我认为这是一个不错的开始。
查看您的代码:
for i in dirty[1:]:
为什么您要从列表中的第一项开始,是否需要将其排除在外?如果是这样,则无论如何都可以通过以下方式删除它:
01.delete('1.0', END)
如果需要保留第一行,则可能需要将代码更改为 01.delete('2.0',END)。
if i not in clean:
clean.append(i)
clean.append('\n')
在这里,您正在创建一个较长的列表,其中包含一堆换行符,每个换行符都被视为列表的成员,很有趣..我弄混了这一部分..经过测试,我发现您的结果仅是结果的一半我做到了。
最后一行:您直接在窗口小部件中推送已更正的列表,这会导致奇怪的结果。
01.insert(END, clean)
以这种方式修复该问题; 01.insert(END,''.join(clean)))会将您的列表分成一个包含以前插入的换行符的字符串,并将所有文本放在正确的位置。