【问题标题】:Time taken by set vs list with for and if使用 for 和 if 的 set vs list 花费的时间
【发布时间】:2014-08-22 02:03:12
【问题描述】:

我有两个系列,我需要找出这两个系列是否有任何共同点,以及它们的用途是什么。 我可以使用列表和 for 和 if 或设置并找到交集来做到这一点。 但我还需要尽量减少运行时间。

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

编辑: 我所说的集合是价值的集合。例如从 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(a) & set(b)

我无法在 linux 中使用 just time 命令,因为它因系统而异

【问题讨论】:

  • 什么是集合?你的意思是collections 模块的某个成员?您如何使用列表、for 和 if 或集合来实现?请显示一些代码。
  • 两者都实现。措施。这就是你的答案。
  • 对 100,000 个左右的元素同时实现,看看会发生什么。
  • 我不明白关于时间“因系统而异”的评论。系统之间是否不一致也没关系,您只需要在一个系统上进行测量,找出哪种方法更快。
  • 假设 a 和 b 都是集合,那么中间的应该更好,因为它将在 C 中完成。如果 a 和 b 是具有相当多元素的列表,则 "set(a ) & set(b)" 应该更快。否则,这是中间和最后一个之间的折腾,第一个机会很小。实际上,正如其他人所提到的那样,如果您担心它,最好只是时间或分析它。

标签: python list data-structures set


【解决方案1】:

“哪种方法更快?”问题几乎总是有相同的答案:分析它并找出答案。速度受太多变量影响,无法提供有用的推测性答案。

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

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

我不完全理解您对使用 Linux 时间命令的担忧。按时间报告的CPU time 总数是计算脚本运行总时间的好方法。这并没有给您特别检查循环效率的解决方案,但是如果您没有看到三种方法之间的时间输出差异,那么这不是瓶颈,您不必担心无论如何。

TL;DR
分析没有捷径可走。使用任何Python's Profilers 来识别您的瓶颈并将注意力集中在它们上。探查器输出将告诉您在 您的 情况下对于 正在处理的数据而言,您提出的哪种方法是最佳的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多