假设如下:
>>> s = set([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
如何获得的值(任意值)出来s而不做s.pop()?我想把这个项留在集合中,直到我确定我可以删除它 - 我只能在异步调用另一个主机后才能确定.
又快又脏:
>>> elem = s.pop()
>>> s.add(elem)
Run Code Online (Sandbox Code Playgroud)
但是你知道更好的方法吗?理想情况下在恒定的时间.
我目前有一个n大小的Python集,其中n> = 0.是否有快速的1或2行Python解决方案来做到这一点?例如,该集合将如下所示:
fruits = set(['apple', 'orange', 'watermelon', 'grape'])
Run Code Online (Sandbox Code Playgroud)
目标是从上面选择2个随机项目,上述集合可能包含0个,1个或更多项目.我能想到的唯一方法是将集合转换为列表(可变),从中可以访问集合长度内的2个随机唯一索引.
为什么Python集的迭代顺序(具有相同的内容)因运行而异,以及从运行到运行使其一致的选项是什么?
我知道Python集的迭代顺序是任意的.如果我将'a','b'和'c'放入一个集合然后迭代它们,它们可能会以任何顺序返回.
我观察到的是,在一个程序的运行中,顺序保持不变.也就是说,如果我的程序连续两次迭代同一个集合,那么我两次都得到相同的顺序.但是,如果我连续两次运行程序,则顺序会从运行更改为运行.
不幸的是,这打破了我的一个自动化测试,它简单地比较了我的程序的两次运行的输出.我不关心实际的顺序,但我希望它在运行之间保持一致.
我提出的最佳解决方案是:
有更简单的解决方案吗?
注意:我在StackOverlow上发现了类似的问题,但是没有一个能解决从运行到运行获得相同结果的特定问题.