Python 集合是否像没有值的字典一样工作?

Python 集合是否像没有值的字典一样工作?,python,dictionary,runtime,Python,Dictionary,Runtime,这个问题是python版本的: 我想要一个包含英语单词列表的数据结构,但不包含它们的定义 基本上:给定一个字母序列,我希望能够进行恒定时间O(1)查找,以确定该序列是否在英语词典中 set()或frozenset()是正确的选择吗 我知道我可以使用字典,其中每个键的值都是None,但这似乎是在浪费内存空间。是的。在一般情况下,集合查找是O(1),老实说,这让我大吃一惊。应该与您描述的内容接近(一个具有伪值的字典)。另见 有关时间复杂性的更多信息,请参阅: 据我所知,它没有内置或包含在任何模块中

这个问题是python版本的:

我想要一个包含英语单词列表的数据结构,但不包含它们的定义

基本上:给定一个字母序列,我希望能够进行恒定时间O(1)查找,以确定该序列是否在英语词典中

set()
frozenset()
是正确的选择吗

我知道我可以使用字典,其中每个键的值都是
None
,但这似乎是在浪费内存空间。

是的。在一般情况下,集合查找是O(1),老实说,这让我大吃一惊。应该与您描述的内容接近(一个具有伪值的字典)。另见

有关时间复杂性的更多信息,请参阅:


据我所知,它没有内置或包含在任何模块中,但也许您应该查看一下数据结构,以防将来需要它的某些属性。

是的,
set
是这项工作的正确工具。您可以找出单词是否在
in
的集合中,该集合以O(1)时间运行。添加单词是通过
add
成员完成的,该成员需要摊销O(1)个时间。此外,它还具有所有常用的有限集运算:并、交、差等:

>>> A = set(["foo", "bar", "baz"])
>>> B = set(["foo", "ham", "spam"])
>>> "foo" in A
True
>>> "bar" in B
False
>>> A | B
set(['bar', 'ham', 'spam', 'foo', 'baz'])
>>> A & B
set(['foo'])
>>> A - B
set(['bar', 'baz'])
>>> B - A
set(['ham', 'spam'])

集合平均有O(1)和一个很好的界面。

我不知道Big-O,但Python语言参考说明如下:

集合的常见用途是快速成员资格测试,从序列中删除重复项,以及计算数学运算,如交集、并集、差分和对称差分


那是个打字错误。这个链接确实显示了正确的信息。很抱歉,我应该校对一下。啊,现在更有意义了:)我很困惑:在中使用
re
而不是
有什么好处?@bluepnume:占用的内存更少。删除它是因为它显然会分散注意力。你所说的一系列字母是什么意思?假设你的字典里有一个单词
apocapse
,你希望通过查找
apoca
lypse
来实现吗?