2014-03-05 66 views
1

如果我有一個Python集合,並且想知道集合中的一個元素是否屬於同一集合中另一個元素的一部分,我該怎麼做?Python,集合,比較同一集合中的兩個元素

我一直在使用indicies嘗試,但我碰到了以下內容:

mySet = {"hello", "lo"} 
mySet[1] in mySet[0] #I expect to return true 
TypeError: 'set' object does not support indexing 

我還沒有發現Python文檔是在這種情況下特別有用,因爲我不知道如何比較內元素一套。

順便說一句,這是我的第一個有史以來的Stackoverflow問題。我試圖堅持最佳實踐。如果有什麼方法可以改善這個問題,請告訴我。感謝您的幫助!

+0

集不提供訪問這樣的單個項目的方法。集合是無序的,所以在集合中沒有「第一個」元素的概念。你爲什麼使用一組來存儲這些數據?其他一些結構可能會更好。 – BrenBarn

+0

你如何得到你想要檢查的集合中的哪個元素?或者你想檢查任何元素是否是其他元素的一部分? – Claudiu

回答

2

套件沒有訂單。元素的索引實際上是元素本身。如果您確實需要集(雖然我懷疑另一種數據結構可能是合適的),那麼他們是可迭代的,你可以比較與其他元素的每個元素,但是這不會是了不起的表現明智的,如:

mySet = {"hello", "lo"} 
for item in mySet: 
    for other_item in mySet.difference([item]): 
     if item in other_item: 
      print item, other_item 
+0

不是那麼高效,是嗎?如果'other_item in mySet:'並且'other_item是item:continue'會不會更好? – Claudiu

+0

@Claudiu在這種情況下,我會去找一個'itertools.product(mySet,repeat = 2)'並過濾出相同的對象(或者甚至可能查看組合/排列)以從中獲得最大收益,但是沒有OP澄清他們爲什麼試圖做到這一切只是「它在技術上是可能的,但不是一個好主意」有點類似 –

+0

更好的是,使用'itertools.combinations'。 – BrenBarn

0

'set'對象不支持索引。

明確指出,您不能將set的元素索引爲mySet [1]。

以訪問一組,你必須使用它像mySet.pop()

0

它看起來就像你沒有真正嘗試比較集合的單個元素,而是集成員。問題是你不能抓取索引成員,因爲set s是一個無序(以及這樣的未索引)元素集合。

您試圖比較這兩個元素(字符串)。因此,你需要的是一個listtuple

>>> myTuple = ('hello', 'lo') 
>>> myTuple[1] in myTuple[0] 
True 

這用來檢查字符串'lo''hello'一子。這出現是你想要完成你的問題。