【发布时间】:2010-09-08 18:11:55
【问题描述】:
假设如下:
>>> s = set([1, 2, 3])
如何在不执行 s.pop() 的情况下从 s 中获取值(任何值)?我想将项目留在集合中,直到我确定我可以将其移除 - 我只能在异步调用另一个主机之后才能确定。
又快又脏:
>>> elem = s.pop()
>>> s.add(elem)
但是你知道更好的方法吗?理想情况下是恒定时间。
【问题讨论】:
-
有人知道为什么python还没有实现这个功能吗?
-
用例是什么?赛特没有这个能力是有原因的。您应该遍历它并进行与集合相关的操作,例如
union等,而不是从中获取元素。例如next(iter({3,2,1}))总是返回1所以如果你认为这会返回随机元素 - 它不会。所以也许你只是使用了错误的数据结构?用例是什么? -
相关:stackoverflow.com/questions/20625579/…(我知道,这不是同一个问题,但那里有有价值的替代方案和见解。)
-
@hlin117 因为 set 是 unordered collection。由于没有预期的顺序,因此在给定位置检索元素是没有意义的 - 它应该是随机的。
-
b = (a-set()).pop()