首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从frozenset中获取任意元素?

如何从frozenset中获取任意元素?
EN

Stack Overflow用户
提问于 2013-07-23 12:47:46
回答 3查看 17.8K关注 0票数 20

我想从一个frozenset中获取一个元素(当然不需要修改它,因为frozenset是不可变的)。到目前为止,我找到的最好的解决方案是:

代码语言:javascript
复制
s = frozenset(['a'])
iter(s).next()

它会像预期的那样返回:

代码语言:javascript
复制
'a'

换句话说,有没有办法从frozenset中“弹出”一个元素,而不是真正地弹出它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-25 04:19:09

(总结评论中给出的答案)

您的方法和其他方法一样好,但需要注意的是,从Python2.6开始,您应该使用next(iter(s))而不是iter(s).next()

如果您想要一个随机元素而不是任意元素,请使用以下方法:

代码语言:javascript
复制
import random
random.sample(s, 1)[0]

这里有几个例子演示了这两者之间的区别:

代码语言:javascript
复制
>>> s = frozenset("kapow")
>>> [next(iter(s)) for _ in range(10)]
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
代码语言:javascript
复制
>>> import random
>>> [random.sample(s, 1)[0] for _ in range(10)]
['w', 'a', 'o', 'o', 'w', 'o', 'k', 'k', 'p', 'k']
票数 15
EN

Stack Overflow用户

发布于 2016-06-28 20:27:58

如果你知道在frozenset中只有一个元素,你可以使用iterable解包:

代码语言:javascript
复制
s = frozenset(['a'])
x, = s

这在某种程度上是原始问题的特例,但有时会派上用场。

如果你有很多这样的东西要做,它可能会比next更快(iter:

代码语言:javascript
复制
>>> timeit.timeit('a,b = foo', setup='foo = frozenset(range(2))', number=100000000)
5.054765939712524
>>> timeit.timeit('a = next(iter(foo))', setup='foo = frozenset(range(2))', number=100000000)
11.258678197860718
票数 15
EN

Stack Overflow用户

发布于 2017-05-05 19:40:45

你可以在python 3中使用:

代码语言:javascript
复制
>>> s = frozenset(['a', 'b', 'c', 'd'])
>>> x, *_ = s
>>> x
'a'
>>> _, x, *_ = s
>>> x
'b'
>>> *_, x, _ = s
>>> x
'c'
>>> *_, x = s
>>> x
'd'
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17801665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档