列出成员资格测试或设置

Dev*_*oka 1 python list set

在添加项目之前检查项目是否已在列表中更有效:

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)

NPE*_*NPE 6

如果最终目的是构造一个集合,直接构造它并且不打扰列表:

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提出的建议.)

绝对不要在你的问题中采用第一种方法,除非你知道列表很短,因为它需要扫描每个单词的整个列表.

  • @ChuckFulminata,设置_can_ store字符串.如果传递一个字符串作为要设置的参数,它当然会将其视为一系列字符.试试`set(['foo','bar','baz'])` (2认同)
  • 我不打扰`set.union`,这将创建一堆越来越大的集合并扔掉它们:`words = set(单词为open in('book.txt','r')for word in line.split())`. (2认同)