[OK]を、ベースラインを:
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])
を使用すると、1ループあたり54ミリ秒です。 range
の代わりにxrange
を使用した場合も同様です。
いくつか他の人によって提案された次の改善は、リストの内包表記を使用することです(少なくとも私には)驚くべきことに
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は既に、リスト内包は組み込み関数を使うときだけ速くなると述べています。
これをもっと速くする方法は他にありませんので、メモリの使用状況がわかりやすい場合は、リストの理解度を使用してください。
私の場合、アルゴリズムの問題があります。実行中にリスト**浮動小数点**が変更されていない場合は、その値を1回だけ変更する必要があります。しかし、私はそう思う(そして望む)と思うので、実行中の** float **の変更のリストを締結する。各変更時にリストが完全に変更された場合(=すべての値またはその大多数)、リストの処理はすでに行っているようにすべての値に関係している必要があります。特定の値だけが変化している場合は、必要なときではなく、変更された瞬間に治療を行うのが面白いかもしれません。あなたのケースは何ですか? – eyquem
すべての値が浮動小数点数に変更されます。リストの元の値はすべて整数または浮動小数点数になります。私はリストを渡すときにそれらが変更されるので、私はそれらを取得するときに浮動小数点になることを知っている。 – MxyL