【问题标题】:Python - set vs. list in a special casePython - 在特殊情况下设置与列表
【发布时间】:2015-01-24 17:17:46
【问题描述】:

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

我的想法是使用集合,因为添加操作会检查元组是否已经存在。但由于没有返回值,我必须检查自己是否已经在集合中。所以我会检查,添加操作会再次检查。

那么使用列表是否更快,因为无论如何我都必须检查自己?所以我会检查元组是否已经在列表中,如果没有,我就追加元组。

【问题讨论】:

  • 你不需要迭代你的列表。您可以使用 in 运算符检查元组是否存在。如果没有,您可以直接附加它。

标签: python performance list set contains


【解决方案1】:

你应该使用一个集合,并测试成员资格:

if mytuple in set_of_tuples:
    break  # already added

set_of_tuples.add(mytuple)

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

换句话说,您确实必须测试元组是否已经在数据结构中,但是针对列表进行测试会越来越慢,而针对集合进行测试总是需要相同的时间,无论有多少元组已经在里面了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多