私は、異なるキーのカウンタとして機能する辞書を持っています。つまり、キーの値は、キーが発生した回数です。 文字列インデックス付き辞書または整数インデックス付き辞書を使用する方が速いのですか?どちらがより良いパフォーマンスを備えていますか?PythonのDicionariesの文字列インデックスまたは整数インデックス?
答えて
# coding=utf-8
import sys
import timeit
print(sys.getsizeof(1000000000))
28
print(sys.getsizeof('aaaaaaa'))
56
print(timeit.timeit('{1:1}', number=10 ** 7))
0.935662218856579
print(timeit.timeit('{"1":1}', number=10 ** 7))
0.8795463330796326
print(timeit.timeit(stmt='a[1]', setup='a = {1:1}', number=10 ** 7))
0.24523148719450227
print(timeit.timeit(stmt='a["1"]',setup='a = {"1":1}', number=10 ** 7))
0.22414418170794992
print(timeit.timeit('{x*x:x for x in range(1000)}', number=1000))
0.10348407957872885
print(timeit.timeit('{"a"*x:x for x in range(1000)}', number=1000))
0.5330044677382393
int型は、より少ないメモリを使用しますが、それは割り当て、辞書からのアクセスに来るとき、私たちはint型が高速化され、その場合には、文字列で辞書を満たしている場合を除き、文字列が....ほんの少し速くなります。
リカルド氏は言った。私はそこに重要な違いがあるとは思わない。
速くしたい場合は、PyPyを使用します。
興味深い。それはPythonの 'hash()'関数が文字列のほうが速いからですか? –
私はこのテストを少し不公平だと考えています。なぜならあなたは1文字の長さだけの文字列を使用していますが、整数の場合は完全な64ビット表現を持っているからです。そして、OPによって掲示された問題の面では、私は文字列が1文字の長さの範囲にあることを疑う。 –
追加される余分な文字ごとに文字列のサイズが1ずつ増加するので、実際には多数のキーのいずれかを使用できます。しかしintは通常は常に小さくなります。それがなぜより速いのか?よく分かりません。 intは自分自身のハッシュコードなので、 'hash()'には関係しないとは思うけど、本当に言うことはできません。 –
あなたの答えは「ほとんど」違いはありません。
Q:なぜほとんどですか?
A:文字列は、文字列を数字にマップするためにインタープリタが必要なため、文字列のサイズに応じて、整数よりも時間がかかることがあります。しかし、それは文字列のサイズによって異なる場合があります。
しかし、あなたのケースにほとんど違いはありません。 Basili Syrakisによって提供された答えに結果が示された。
辞書はハッシュテーブルに基づいているため、指定されたキーの値を返すには漸近的にO(1)が必要です。あなたのケースでは大きな違いはありません。
実際の結論に投票しました –
- 1. はTypeError:文字列のインデックスが整数API Twitterの
- 2. python json errors:文字列インデックスは整数でなければなりません
- 3. 文字列のインデックス
- 4. 文字列のインデックスを整数に変換する
- 5. if文を使用したPython forループ:TypeError:文字列インデックスは整数でなければなりません
- 6. 文字列を整数値でインデックスできない理由
- 7. Pythonの文字列スライスのインデックス - 文字列の末尾までのスライス
- 8. php配列 - 数値文字列インデックス
- 9. Java文字列は、インデックス
- 10. postgresqlインデックスの文字列
- 11. PostgreSQLの文字列型インデックス
- 12. 文字列のインデックスJavaメソッド
- 13. 負の文字列インデックス
- 14. インデックスの分割文字列
- 15. :: - 1はPythonの文字列インデックスを意味しますか?
- 16. Python:文字列の最後からインデックスを返す関数
- 17. TypeError:文字列インデックスは整数でなければなりません
- 18. TypeError:文字列インデックスは整数でなければなりません
- 19. Python:インデックスで文字列の数字を参照する方法は?
- 20. は、私は文字列の持つインデックス
- 21. timeseries MySQLテーブルの複数列インデックスまたは複数インデックス?
- 22. Matlabの偶数インデックス文字と奇数インデックス文字の切り替え
- 23. Python numpy配列整数のインデックス付きフラットスライスの割り当て
- 24. 文字列インデックスは、strではなく整数でなければなりません - Pythonスクリプト
- 25. 「[インデックス:文字列]」:typescriptです
- 26. 文字列インデックスSwift 3
- 27. は、リスト内の文字列を見つけ、インデックスまたは-1
- 28. 特定のインデックスの文字列に追加または追加
- 29. MySQLの第2(または第3)インデックスの文字列
- 30. Python、Jsonと文字列インデックスはstrでなく整数でなければなりません
あなたはそれについて何か考えましたか? –
どのくらいのデータが必要ですか?パフォーマンスは本当に重要ですか?私の本能は、プログラムするのが最も簡単なものと一緒に行くことです。 – Matthew