在添加项目之前检查项目是否已在列表中更有效:
for word in open('book.txt','r').read().split():
if word in list:
pass
else:
list.append(item)
Run Code Online (Sandbox Code Playgroud)
或者添加一切然后运行set()吗?像这样:
for word in open('book.txt','r').read().split():
list.append(word)
list = set(list)
Run Code Online (Sandbox Code Playgroud)
如果最终目的是构造一个集合,直接构造它并且不打扰列表:
words = set(open('book.txt','r').read().split())
Run Code Online (Sandbox Code Playgroud)
这将是简单而有效的.
就像你的原始代码一样,这有一个缺点就是首先将整个文件读入内存.如果这是一个问题,可以通过一次读取一行来解决:
words = set(word for line in open('book.txt', 'r') for word in line.split())
Run Code Online (Sandbox Code Playgroud)
(感谢@Steve Jessop提出的建议.)
绝对不要在你的问题中采用第一种方法,除非你知道列表很短,因为它需要扫描每个单词的整个列表.