2014-03-05 78 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'一子。这出现是你想要完成你的问题。