3

私は現在、2 つの異なるソース/入力によってスクリプトに提供された数値を比較する必要があるスクリプトを作成しています。1 つのソースは数値を整数として提供し、1 つのソースはそれらを文字列として提供します。それらを比較する必要があるためstr()、整数またはint()文字列のいずれかで使用する必要があります。

変換の量が等しいと仮定すると、文字列を整数に変換する方が効率的ですか、またはその逆ですか?

4

3 に答える 3

10
$ python -m timeit "int('92184') == 92184"
1000000 loops, best of 3: 0.482 usec per loop
$ python -m timeit "str(92184) == '92184'"
1000000 loops, best of 3: 0.241 usec per loop

ほら、intを文字列に変換して比較する必要があります。これは、それらが等しいかどうかを確認したい場合にのみ機能することに注意してください。どちらが大きいかを調べるつもりなら、これは機能せず、 に変換する必要がありますint

-1'000'000 と 1'000'000 の間で 1000 個の乱数を事前に生成して上記のテストを拡張すると、ほぼ同じ結果が得られintますstr

コメントに記載されているように、これは時期尚早の最適化である可能性が非常に高いことに注意してください。これは、読みやすさや機能など、コーディング方法に影響を与える可能性のある他の考慮事項について最初に検討する必要があることを意味します。スクリプトが完成したら、遅い場合はプロファイラーを使用して、最適化の取り組みをどこに集中させるべきかを判断してください。

于 2012-07-27T11:53:54.837 に答える
1

Python 2.7 と Python 3.4 の両方で最も速いのは、printf スタイルの書式設定を使用して int を文字列に変換することです。

'%i' % 92184 == '92184'

python3 -m timeit "'%i' % 92184 == '92184'"
10000000 loops, best of 3: 0.0432 usec per loop

python3 -m timeit "int('92184') == 92184"
1000000 loops, best of 3: 0.284 usec per loop

python3 -m timeit "str(92184) == '92184'"
1000000 loops, best of 3: 0.312 usec per loop

python2 -m timeit "'%i' % 92184 == '92184'"
10000000 loops, best of 3: 0.102 usec per loop

python2 -m timeit "str(92184) == '92184'"
1000000 loops, best of 3: 0.287 usec per loop

python2 -m timeit "int('92184') == 92184"
1000000 loops, best of 3: 0.604 usec per loop
于 2014-12-15T20:33:55.593 に答える
1

「比較」が正確に何を意味するのかはよくわかりませんが、常に厳密な平等性だけではない場合は、整数を使用することをお勧めします。データなどを並べ替える必要がある場合がありますが、この方法の方が簡単です!

于 2012-07-27T12:00:53.923 に答える