首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中以对的形式使用frozenset

在python中以对的形式使用frozenset
EN

Stack Overflow用户
提问于 2011-03-04 13:04:28
回答 4查看 7.5K关注 0票数 8

我想做一对两个元素。我不关心元素的顺序,所以我使用frozenset

我可以想到以下两种方法来迭代回frozenset中的元素。有没有更花哨的方法?提前谢谢。

代码语言:javascript
复制
pair = frozenset([element1, element2])
pair2 = list(pair)
elem1 = pair2[0]
elem2 = pair2[1]
代码语言:javascript
复制
pair = frozenset([element1, element2])
elems = []
for elem in pair:
    elems.append(elem)
elem1 = elems[0]
elem2 = elems[1]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-04 13:08:45

代码语言:javascript
复制
pair = frozenset([element1, element2])
elem1, elem2 = pair
票数 16
EN

Stack Overflow用户

发布于 2011-03-04 16:26:09

如果你有很多这样的配对的东西,使用frozenset()不是一个好主意。请改用元组。

代码语言:javascript
复制
>>> import sys
>>> fs1 = frozenset([42, 666])
>>> fs2 = frozenset([666, 42])
>>> fs1 == fs2
True
>>> t1 = tuple(sorted([42, 666]))
>>> t2 = tuple(sorted([666, 42]))
>>> t1 == t2
True
>>> sys.getsizeof(fs1)
116
>>> sys.getsizeof(t1)
36
>>>

更新奖励:排序的元组有一个可预测的迭代序列:

代码语言:javascript
复制
>>> for thing in fs1, fs2, t1, t2: print [x for x in thing]
...
[42, 666]
[666, 42]
[42, 666]
[42, 666]
>>>

更新2 ...并且它们的repr()是相同的:

代码语言:javascript
复制
>>> repr(fs1)
'frozenset([42, 666])'
>>> repr(fs2)
'frozenset([666, 42])' # possible source of confusion
>>> repr(t1)
'(42, 666)'
>>> repr(t2)
'(42, 666)'
>>>
票数 9
EN

Stack Overflow用户

发布于 2011-03-04 13:10:39

如果只有两个元素,则将它们打乱顺序。但我不确定,你想在这里用冷冻设备做什么

代码语言:javascript
复制
>>> s = frozenset([1,2])
>>> s
frozenset({1, 2})
>>> x,y = s
>>> x
1
>>> y
2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5189909

复制
相关文章

相似问题

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