我想在 Python 的集合中搜索一个元素。如何在最快的时间内获得被搜索元素的索引?
element in set
不给索引!我想知道元素的索引。
使用lists
或者tuples
如果您对索引感兴趣,sets
则不维护任何顺序。
从文档:
作为无序集合,集合不记录元素位置或插入顺序。因此,集合不支持索引、切片或其他类似序列的行为。
或者可能是这样的:
In [1]: se=set("foobarspampython")
In [2]: se
Out[2]: set(['a', 'b', 'f', 'h', 'm', 'n', 'o', 'p', 'r', 's', 't', 'y'])
In [3]: list(se).index("f") # in the original string the index is 0,
# but list(set) returns something different
Out[3]: 2
Python 3.x:
您可以OrderedDict()
在 python 3.x 中使用,并将您的项目用作字典的键。
dict.keys()
在 python 3.x 中返回keysView
,它有点类似于sets
,您可以对其执行所有设置操作。
>>> from collections import OrderedDict as od
>>> strs="foobarspampython"
>>> dic=od((x,"") for x in strs)
>>> dic.keys() #order is maintained
KeysView(OrderedDict([('f', ''), ('o', ''), ('b', ''), ('a', ''), ('r', ''),
('s', ''), ('p', ''), ('m', ''), ('y', ''), ('t', ''),
('h', ''), ('n', '')]))
>>> list(dic.keys()).index("f")
0
>>> list(dic.keys()).index("b")
2
>>> dic.keys() & {'a','b','c'} # even set operations work fine on it
{'a', 'b'}
如果您需要访问索引和快速查找的能力,您应该看看(非标准)blist 包。它提供了一个快速列表实现,可以保持顺序,从而允许快速访问。它不会尽可能快set
,但您将能够检索索引。