set vs list with for和if所花费的时间

时间:2014-07-01 13:26:41

标签: python list data-structures set

我有两个集合,我需要找到两个集合是否有任何共同之处,如果他们做了什么。 我可以使用列表和for和if或sets并找到交集。 但我还需要尽量减少运行时间。

这两种方法中哪一种更节省时间? 注意:秒的比例差异也很重要。

编辑: 我的意思是收集是一组价值观。例如,从csv读取。我可以将它们列入清单或进行进一步操作。 例: a = ['D','C','B','A'] b = ['A','B',E',Z','N','W']

现在我可以通过以下方式实现这一目标吗?

common=[]
for item in a:
    if item not in b:
        common.append(item)

使用列表理解

common=[item for item in a if item not in b]

使用set

set(a) & set(b)

我无法使用来自linux的时间命令,因为从系统到系统的变化非常大

1 个答案:

答案 0 :(得分:1)

"哪种方法更快?"问题几乎总是有相同的答案:剖析它并找出答案。对于有用的推测性答案,速度会受到太多变量的影响。

话虽如此,你的理解选项几乎肯定会比for循环选项更快,因为implicit loops are generally faster than explicit ones。请注意,即使该链接中的文档也有此警告:

  

哪种方法适用取决于您使用的Python版本以及您正在操作的数据的特征。

我不完全理解您对使用Linux time命令的担忧。按时间报告的总CPU time是计算脚本运行总时间的一种不错的方法。这并没有给出解决方案来特别检查循环的效率,但如果你没有看到三种方法之间的时间输出不同,那么它就不会出现瓶颈和问题。无论如何你不应该担心它。

<强> TL; DR
分析没有捷径。使用Python's Profilers中的任何一个来识别您的瓶颈并将注意力集中在它们上面。对于正在处理的数据,分析器输出将告诉您 案例中哪种方法最佳。