哈希 freezeset 与排序元组

Nei*_*l G 5 python hash python-3.x

在 Python 中,给定一组可比较的、可散列的元素,散列或s哪个更好。frozenset(s)tuple(sorted(s))

Aka*_*all 4

这取决于你在做什么。创建 afrozenset()比对 a 进行排序要快tuple,但frozenset比 a 占用更多内存tuple

frozenset创建a 比创建 a更快tuple

import timeit

import random as rn

x = range(2000)
rn.shuffle(x)
x = tuple(x)

def get_frozen_set(x):
    return frozenset(x)

def get_sorted_tuple(x):
    return sorted(x)

n = 10000

t1 = timeit.timeit('get_frozen_set(x)', 'from __main__ import x, get_frozen_set', number = n)
print 'create a frozenset:', t1
t2 = timeit.timeit('get_sorted_tuple(x)','from __main__ import x, get_sorted_tuple', number = n)
print 'sort tuple:', t2
Run Code Online (Sandbox Code Playgroud)

结果:

create a frozenset: 0.85803164112
sort tuple: 6.65848886198
Run Code Online (Sandbox Code Playgroud)

虽然差距很大,但起步时间很tuple短。为了n = 20

结果:

create a frozenset: 0.0124568308591
sort tuple: 0.0257906431368
Run Code Online (Sandbox Code Playgroud)

frozenset占用更多memory,此处对此进行了说明。

此处frozensettuple之间的查找时间差异非常小