好,基線:
python -m timeit
"from random import randint;
floats = [randint(0, 1000000)/1000.0 for unused in range(10000)]"
"for i in range(len(floats)):
floats[i] = '%.4f' % floats[i]"
10 loops, best of 3: 48.7 msec per loop
有趣的是,新的風格的字符串格式化是有點慢。使用'{0:5.4f}'.format(floats[i])
每循環提供54毫秒。使用xrange
代替range
時,同樣的情況。
下次改進建議的其他幾個人是使用列表理解:
python -m timeit
"from random import randint;
floats = [randint(0, 1000000)/1000.0 for unused in range(10000)]"
"floats = ['%.4f' % f for f in floats]"
10 loops, best of 3: 48.1 msec per loop
令人驚訝的(至少我),這是不是顯著更快!不過,@Felix King已經提到,使用內建函數時,列表解析只會更快。
我真的沒有任何關於如何使這個更快的建議,所以我建議,如果內存使用對你來說是合適的,那就使用列表理解,因爲它更具可讀性,因此更加pythonic。
對我來說有一個算法問題:如果你的列表** float **在執行過程中沒有被修改,你只能改變它的值一次;但我認爲(並希望)情況並非如此,因此我在執行期間總結了列表** float **的變化。如果列表在每次修改時完全改變(=所有值或大部分值),那麼列表的處理必須涉及所有值,就像您已經做的一樣;但是如果只有某些價值觀發生變化,那麼在他們改變的時刻進行治療可能會很有趣,而不是在他們需要的時刻。你的情況是什麼? – eyquem
所有值將更改爲浮動。列表中的所有原始值都將是整數或浮點數。當我通過列表時,它們會發生變化,以便我知道當我檢索它們時它們將會漂浮。 – MxyL