在集合中搜索

时间:2012-11-02 10:29:16

标签: python

我想在Python中搜索set中的元素。 如何在最快的时间内获得被搜索元素的索引?

element in set没有给索引!我想知道元素的索引。

2 个答案:

答案 0 :(得分:7)

如果您对索引感兴趣,请使用liststuplessets不保留任何订单。

来自Docs

  

作为无序集合,集合不记录元素位置或   插入顺序。因此,集合不支持索引,   切片或其他类似序列的行为。

或者可能是这样的:

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:

您可以在python 3.x中使用OrderedDict(),并使用您的项目作为dict的键。 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'}

答案 1 :(得分:2)

如果您同时需要访问索引和快速查找的功能,则应该查看(非标准)blist package。它提供快速列表实现,维护顺序,从而允许快速访问。它不会像set那么快,但您将能够检索到指标。

相关问题