質問編集履歴
3
PyPy, Cythonでの計測結果追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -60,17 +60,19 @@
|
|
60
60
|
|CPU|AMD Ryzen 5 1400 3.2GHz|
|
61
61
|
|
62
62
|
####測定結果
|
63
|
-
|バージョン|#1(毎回keys())|#1(固定keys)|#2|
|
63
|
+
|Python実装|バージョン|#1(毎回keys())|#1(固定keys)|#2|補足|
|
64
|
-
|:--|:--:|:--:|:--:|
|
64
|
+
|:--|:--:|:--:|:--:|:--:|:--:|
|
65
|
-
|2.7.16|(計測断念)|(計測断念)|0.166±0.005|
|
65
|
+
|CPython|2.7.16|(計測断念)|(計測断念)|0.166±0.005|-|
|
66
|
-
|3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|
|
66
|
+
|CPython|3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|-|
|
67
|
+
|PyPy|2.7.13|(計測断念)|(計測断念)|0.069±0.003|docker使用|
|
68
|
+
|PyPy|3.6.9|0.084±0.004|0.074±0.005|0.070±0.004|docker使用|
|
69
|
+
|Cython|3.7.3|0.157±0.010|0.109±0.003|0.107±0.004|Jupyter Notebook使用|
|
67
70
|
|
68
|
-
Python実装: CPython
|
69
71
|
単位: 秒
|
70
72
|
測定回数: 100
|
71
73
|
|
72
74
|
####考察
|
73
|
-
|
75
|
+
バージョンに依らず、```#2```の方法が速いように見える
|
74
76
|
|
75
77
|
# 質問
|
76
78
|
dictにキーが含まれているかどうかの判定はどのようにやるのが、適切なのでしょうか?
|
2
hayataka2049さんの回答より、dic.keys()を事前に計算する方式を追加。ついでに測定回数を100回にし、平均と標準偏差を出した。
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,8 +17,15 @@
|
|
17
17
|
### 検証コード
|
18
18
|
```python
|
19
19
|
import time
|
20
|
+
from math import sqrt
|
20
21
|
|
22
|
+
mean=lambda list: sum(list)/len(list)
|
23
|
+
def stdev(list):
|
24
|
+
avg = mean(list)
|
25
|
+
return sqrt(sum([(x-avg)*(x-avg) for x in list])/(len(list)-1))
|
26
|
+
|
21
27
|
N=1000000
|
28
|
+
REP=100
|
22
29
|
dic = {float(x):float(x) for x in range(N)}
|
23
30
|
|
24
31
|
def func(f):
|
@@ -29,11 +36,18 @@
|
|
29
36
|
end = time.time()
|
30
37
|
if sum != N:
|
31
38
|
raise Exception
|
32
|
-
|
39
|
+
return end - start
|
33
40
|
|
41
|
+
def func2(f):
|
42
|
+
times = [func(f) for i in range(REP)]
|
43
|
+
print(str(mean(times)) + "\t" + str(stdev(times)))
|
44
|
+
|
34
|
-
|
45
|
+
func2(lambda x: x in dic)
|
46
|
+
keys = dic.keys()
|
47
|
+
func2(lambda x: x in keys)
|
35
|
-
|
48
|
+
func2(lambda x: x in dic.keys())
|
36
49
|
```
|
50
|
+
※hayataka2049さんの回答より、dic.keys()を事前に計算する方式を追加。ついでに測定回数を100回にし、平均と標準偏差を出した。
|
37
51
|
|
38
52
|
### 検証結果
|
39
53
|
####測定環境
|
@@ -46,14 +60,14 @@
|
|
46
60
|
|CPU|AMD Ryzen 5 1400 3.2GHz|
|
47
61
|
|
48
62
|
####測定結果
|
49
|
-
|バージョン|#1|#2|
|
63
|
+
|バージョン|#1(毎回keys())|#1(固定keys)|#2|
|
50
|
-
|:--|:--:|--:|
|
64
|
+
|:--|:--:|:--:|:--:|
|
51
|
-
|2.7.16|(計測断念)|0.166|
|
65
|
+
|2.7.16|(計測断念)|(計測断念)|0.166±0.005|
|
52
|
-
|3.7.3|0.
|
66
|
+
|3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|
|
53
67
|
|
54
68
|
Python実装: CPython
|
55
69
|
単位: 秒
|
56
|
-
測定回数:
|
70
|
+
測定回数: 100
|
57
71
|
|
58
72
|
####考察
|
59
73
|
回数が十分ではないが、バージョンに依らず、```#2```の方法が速いように見える
|
1
Python実装を書き忘れたので項目追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -51,6 +51,7 @@
|
|
51
51
|
|2.7.16|(計測断念)|0.166|
|
52
52
|
|3.7.3|0.193|0.156|
|
53
53
|
|
54
|
+
Python実装: CPython
|
54
55
|
単位: 秒
|
55
56
|
測定回数: 1
|
56
57
|
|