San*_*min 7 python set immutability
我想制作一对两个元素.我不关心元素的顺序,所以我用 frozenset.
我可以想到以下两种方法从冻结集迭代元素.是不是有更高级的方法?提前致谢.
pair = frozenset([element1, element2])
pair2 = list(pair)
elem1 = pair2[0]
elem2 = pair2[1]Run Code Online (Sandbox Code Playgroud)
pair = frozenset([element1, element2])
elems = []
for elem in pair:
elems.append(elem)
elem1 = elems[0]
elem2 = elems[1]Run Code Online (Sandbox Code Playgroud)
kin*_*all 16
pair = frozenset([element1, element2])
elem1, elem2 = pair
Run Code Online (Sandbox Code Playgroud)
如果你有很多这样的东西,使用frozenset()不是一个好主意.改为使用元组.
>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)
更新奖励:已排序的元组具有可预测的迭代序列:
>>> for thing in fs1, fs2, t1, t2: print [x for x in thing]
...
[42, 666]
[666, 42]
[42, 666]
[42, 666]
>>>
Run Code Online (Sandbox Code Playgroud)
更新2 ...他们的repr()是相同的:
>>> repr(fs1)
'frozenset([42, 666])'
>>> repr(fs2)
'frozenset([666, 42])' # possible source of confusion
>>> repr(t1)
'(42, 666)'
>>> repr(t2)
'(42, 666)'
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7092 次 |
| 最近记录: |