Cht*_*ect 0 python iterable set
我手边有一个体面大小的文本文件(~23MB).我正在逐行读取文件,并根据一些外部标准从每行中提取几个单词.为了这个例子,让我们说每行包含至少六个以制表符分隔的值,除了第一个和最后一个之外,我正在接收所有这些值.
我想输出以这种方式获得的一组唯一单词,所以显然我想将提取的单词存储在一个set.此外,由于set.update(other)比循环other和一次添加一个单词要快得多set.add(elem),我尝试这样做:
all_words = set()
with open(my_tsv_file) as tsv_file:
for line in tsv_file:
wordlist = based_on_some_criteria(line) # this is a list, not a set
all_words.update(wordlist)
Run Code Online (Sandbox Code Playgroud)
这很好用.但是当我替换all_words.update(wordlist)时all_words |= wordlist,我得到以下错误:
TypeError: unsupported operand type(s) for |=: 'set' and 'list'
Run Code Online (Sandbox Code Playgroud)
从文档中,我理解update并且|=是等效的.此外,因为|=应该接受任何迭代,我也通过这样做证实:
import collections
isinstance(wordlist, collections.Iterable) # returns True
Run Code Online (Sandbox Code Playgroud)
为什么第一种方法使用set.update工作,而不是第二种方法使用|=?
从文档中,我了解更新和| =是等效的.此外,因为| =应该接受任何迭代...
从文档:
需要注意的的非运营商的版本
update(),intersection_update(),difference_update(),和symmetric_difference_update()方法会接受任何迭代器作为参数.
文档似乎不符合您的理解.