2012-11-02 118 views
1

我想在Python中搜索集合中的元素。 我怎樣才能得到被搜索的元素在最快時間的索引?在集合中搜索

element in set不給索引!我想知道元素的索引。

+9

一套中的元素不**有**索引! –

+1

你爲什麼需要一個索引? – SilentGhost

回答

7

使用liststuples如果您對索引感興趣,sets不保留任何順序。

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.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'} 
+0

和索引是完全隨機的你顯示! – SilentGhost

+0

@SilentGhost是的,這是完全不可預知的順序是什麼。 –

+0

@SilentGhost我認爲在python 3.x中可以使用'OrderedDict'。將這些項目用作空值的鍵。由於'dict.keys()'返回'keysView()。',我們可以在其上執行設置操作。 –

2

如果你需要同時訪問索引和快速查找的能力,你應該有一個看看(非標)blist package。它提供了一個快速的列表實現,它維護順序並因此允許快速訪問。它不會像set那樣快,但是您將能夠檢索標記。