有没有一种简单的方法可以在Python中询问一个元素集?以下是我使用的一些方法:
elem = myset.pop(); myset.add(elem)
elem = random.choice(list(myset))
elem = list(myset)[0]
这些方法中的每一种都是低效且笨拙的。
有没有办法只问elem = myset.get()
这样的东西,它会返回集合的元素而不删除它?就像一个不删除的pop()?
(当然,该方法每次都可能返回相同的元素,直到该集被其他代码更改,但这仍然有用。)
答案 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]