2016-07-04 118 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'從管道到腳本文件來了。但我同意這可能無關緊要。 –