从Python集中请求一个元素

时间:2014-12-10 06:09:27

标签: python python-2.7 set

有没有一种简单的方法可以在Python中询问一个元素集?以下是我使用的一些方法:

elem = myset.pop(); myset.add(elem)
elem = random.choice(list(myset))
elem = list(myset)[0]

这些方法中的每一种都是低效且笨拙的。

有没有办法只问elem = myset.get()这样的东西,它会返回集合的元素而不删除它?就像一个不删除的pop()?

(当然,该方法每次都可能返回相同的元素,直到该集被其他代码更改,但这仍然有用。)

3 个答案:

答案 0 :(得分:2)

elem = next(iter(myset))

for elem in myset:
    break

如果您发现这些代码段与人混淆,您可以将它们包装在一个名字很好的函数中:

def arbitrary_element_of(thing):
    for elem in thing:
        return elem
    raise ValueError("Argument is empty")

答案 1 :(得分:1)

>>> myset = (1,2,3,4,10)
>>> gen = (iter(myset))
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
3
>>> next(gen)
4
>>> next(gen)
10
>>> next(gen)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

答案 2 :(得分:0)

你可以使用这样的函数,它破坏性地和任意地迭代从集合元素创建的临时字典的内容。

def get_elem(s):
    d = dict.fromkeys(s)
    while d:
        yield d.popitem()[0]