Python - 在特殊情况下设置与列表

时间:2014-11-26 11:35:02

标签: python performance list set contains

我需要存储元组。 每次添加一个元组时,我都需要知道元组是否已经添加或已经存在,因为如果它已经存在(在列表/集合中)我可以打破内部for循环,所以我不必检查其他几个元组。

我的想法是使用一个集合,因为add-operation会检查元组是否已经存在。但由于没有返回值,我必须检查自己元组是否已经在集合中。所以我会检查并且add-operation会再次检查。

因此使用列表更快,因为我还是要检查自己?所以我会检查元组是否已经在列表中,如果不是,我只会附加元组。

1 个答案:

答案 0 :(得分:4)

你应该使用一套,并测试会员资格:

if mytuple in set_of_tuples:
    break  # already added

set_of_tuples.add(mytuple)

针对集合测试成员资格需要恒定时间(O(1)),而针对列表的测试需要线性时间(O(N),列表中的每个元素都要进行测试)。

换句话说,你必须测试元组是否已经在数据结构中,但是对列表的测试变得越来越慢,而对一个集合的测试总是花费相同的时间,而不管有多少元组已经在那里了。