Python - 特殊情况下的集合与列表

标签 python performance list set contains

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

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

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

最佳答案

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

if mytuple in set_of_tuples:
    break  # already added

set_of_tuples.add(mytuple)

测试集合的成员资格需要常数时间 (O(1)),而测试列表需要线性时间(O(N),列表中的每个元素都要测试)。

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

关于Python - 特殊情况下的集合与列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27148129/

相关文章:

mysql - 将索引添加到 MySQL 中的 BIGINT 列会有所帮助吗?

python - CPython 和 PyPy 十进制运算性能

python - 您如何知道新列表是已创建还是刚刚修改?

python - 根据属性选择列表中的随机元素

python - 如何使用迁移来移动数据

python - 使用python从图像中删除CT床

python - 表达式 awk,python 中的字符无效

java - 使用 Java NIO 的文件复制在 Linux 上很慢

python - 获取整数中偶数最长序列的最佳方法

python - 如何基于变量创建具有维度的数组?