-
慕姐4208626
这取决于你打算用它做什么。在确定对象是否存在于集合中时(如在x in s)中,集合明显更快,但在迭代其内容时比列表慢。您可以使用timeit模块查看哪种情况更快。
-
达令说
当您只想迭代值时,列表比设置略快。但是,如果要检查项目是否包含在内,则集合明显快于列表。但它们只能包含唯一的项目。事实证明,元组的表现几乎与列表完全相同,除了它们的不变性。迭代>>> def iter_test(iterable):... for i in iterable:... pass...>>> from timeit import timeit>>> timeit(... "iter_test(iterable)",... setup="from __main__ import iter_test; iterable = set(range(10000))",... number=100000)12.666952133178711>>> timeit(... "iter_test(iterable)",... setup="from __main__ import iter_test; iterable = list(range(10000))",... number=100000)9.917098999023438>>> timeit(... "iter_test(iterable)",... setup="from __main__ import iter_test; iterable = tuple(range(10000))",... number=100000)9.865639209747314确定对象是否存在>>> def in_test(iterable):... for i in range(1000):... if i in iterable:... pass...>>> from timeit import timeit>>> timeit(... "in_test(iterable)",... setup="from __main__ import in_test; iterable = set(range(1000))",... number=10000)0.5591847896575928>>> timeit(... "in_test(iterable)",... setup="from __main__ import in_test; iterable = list(range(1000))",... number=10000)50.18339991569519>>> timeit(... "in_test(iterable)",... setup="from __main__ import in_test; iterable = tuple(range(1000))",... number=10000)51.597304821014404
-
杨__羊羊
清单表现:>>> import timeit>>> timeit.timeit(stmt='10**6 in a', setup='a = range(10**6)', number=100000)0.008128150348026608设定表现:>>> timeit.timeit(stmt='10**6 in a', setup='a = set(range(10**6))', number=100000)0.005674857488571661您可能需要考虑元组,因为它们与列表类似但无法修改。它们占用的内存略少,访问速度更快。它们不像列表那样灵活,但效率更高。它们的正常用途是作为字典键。集合也是序列结构,但与列表和元组有两个不同。虽然集合确实有订单,但该顺序是任意的,不受程序员的控制。第二个区别是集合中的元素必须是唯一的。set根据定义。[ python | 维基 ]。>>> x = set([1, 1, 2, 2, 3, 3])>>> x{1, 2, 3}