29

而不是这个:

a = {"foo": None, "bar": None}

有没有办法写这个?

b = {"foo", "bar"}

并且仍然让b有恒定的时间访问(即不是一个 Python 集,它不能被键入)?

4

3 回答 3

30

实际上,在 Python 2.7 和 3.2+ 中,这确实有效:

>>> b = {"foo", "bar"}
>>> b
set(['foo', 'bar'])

您不能[]在集合上使用访问权限(“key into”),但您可以测试是否包含:

>>> 'x' in b
False
>>> 'foo' in b
True

集合尽可能接近无值字典。它们具有平均情况下的常量时间访问,需要可散列的对象(即没有存储列表或集合中的字典),甚至支持它们自己的理解语法:

{x**2 for x in xrange(100)}
于 2013-10-18T16:54:25.240 回答
19

是的,sets

set() -> new empty set object
set(iterable) -> new set object

Build an unordered collection of unique elements.

相关:set() 是如何实现的?

时间复杂度:https ://wiki.python.org/moin/TimeComplexity#set

于 2013-10-18T16:51:57.913 回答
4

为了在恒定时间内“键入”一组,请使用in

>>> s = set(['foo', 'bar', 'baz'])
>>> 'foo' in s
True
>>> 'fork' in s
False
于 2013-10-18T16:53:38.540 回答