2016-07-04 90 views
0

有没有做这方面的性能有什么区别:两段代码之间的区别?

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)) 

如果是,哪个更好?

+1

这是一个完美的问题来尝试自己; '进口时间; timeit.timeit(功能)'。 –

+0

你对哪一点感兴趣?是否内联输入有区别,或者list(map(...))对列表理解有不同的表现? – jonrsharpe

+0

第一个循环在那里,因为我需要创建T个数组。我需要知道如果使用map()并将每个字符串数组转换为int将提高性能,而不是使用嵌套循环来实现相同。 – snow

回答

2

根据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(来自文件,我假设?)或者对数据进行计算相比,这可能是相当不重要的。

+3

无一不是完全压倒了由I/O输入()从用户 –

+0

是对于不同的输入尺寸这是真的吗(即,两种替代方案的增长功能中不存在“交叉”)。 – dfri

+0

@joelgoldstick依赖,也许'input'从管道到脚本文件来了。但我同意这可能无关紧要。 –