【问题标题】:Difference between two snippets of code?两段代码的区别?
【发布时间】:2016-07-04 14:47:45
【问题描述】:

这样做在性能方面有什么区别:

for i in range(T):  
      arr = [int(arr_temp) for arr_temp in input().strip().split(' ')]

还有这个:

for i in range(T):
    arr = input().strip().split(' ')
    arr = list(map(int, arr))

如果是,哪个更好?

【问题讨论】:

  • 这是您自己尝试的完美问题; import timeit; timeit.timeit(function).
  • 您对哪位感兴趣?内联 input 是否会产生影响,或者 list(map(...)) 与列表理解的表现是否不同?
  • 第一个循环在那里,因为我需要创建 T 个数组。我需要知道使用 map() 并将每个字符串数组转换为 int 是否会提高性能,而不是使用嵌套循环来实现相同的效果。

标签: python performance python-3.x


【解决方案1】:

根据IPython的%timeit函数,map快一点:

In [16]: s = ' '.join(map(str, range(1000)))

In [17]: %timeit [int(c) for c in s.split()]
10000 loops, best of 3: 171 µs per loop

In [18]: %timeit list(map(int, s.split()))
10000 loops, best of 3: 138 µs per loop

使用 IPython 1.2.1 和 Python 3.4.3 以及不同的输入大小(range(1000)range(10)range(100000))进行测试。

当然,有趣的问题是:这部分代码是否会减慢您的程序(假设这就是您询问的原因,而不是出于纯粹的好奇)。与例如读取input(我猜是从文件中?)或使用数据进行计算相比,这可能微不足道。

【讨论】:

  • 两者都完全被用户的 I/O input() 淹没了
  • 对于不同的输入大小是否如此? (即,两个备选方案的增长函数中没有“交叉”)。
  • @joelgoldstick 取决于,input 可能来自通过管道传输到脚本中的文件。但我同意这可能无关紧要。
  • @dfri 好点,检查...是的,在这两种情况下似乎都非常线性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2021-01-06
  • 2012-09-22
相关资源
最近更新 更多