Legende:
Die erste Tabelle zeigt die erzeugte Liste und den Verfahrensnamen.
Die anderen Tablellen Zeigen den Verfahrensnamen und die von timeit gemessene Zeit in Sekunden und sind geordnet nach der Zeit.
number: number of iteration in timeit statement
der Name des Verfahrens ist username_ddHHMM, wobei ddHHMM Tag, Stunde und Minute des Eintrags ist, in dem er veröffentlicht wurde.
In Dav1d_182334 wurde izip durch zip ersetzt, da ich izip in Python 3.5 nicht finden konnte. Bei einigen Ausdrücken wurde noch mit list(statement) aus dem Objekt eine Liste erzeugt.
Python: 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)]
OS: Windows 7 Enterprise, Servicepack 1, 64 Bit
Hardware: Intel® Core™ i7-2640M Processor , 2.80GHz, 8GB Hauptspeicher
Code: Alles auswählen
test: y=3, x=7
[0, 0, 1, 0, 0, 1, 0] bwbg_182338
[0, 0, 1, 0, 0, 1, 0] Dav1d_182334
[0, 0, 1, 0, 0, 1, 0] miracle173_202027_1
[0, 0, 1, 0, 0, 1] Dav1d_182320
[0, 0, 1, 0, 0, 1, 0] snafu_182202
[0, 0, 1, 0, 0, 1, 0] snafu_181957
[0, 0, 1, 0, 0, 1, 0] Dav1d_181950
[0, 0, 1, 0, 0, 1, 0] miracle173_202027_2
[0, 0, 1, 0, 0, 1, 0] bwbg_182126
[0, 0, 1, 0, 0, 1, 0] mutetella_181721
y= 3, x= 15, number= 100000
miracle173_202027_2 0.08149
miracle173_202027_1 0.09124
snafu_182202 0.16363
Dav1d_182320 0.18929
Dav1d_182334 0.24667
snafu_181957 0.26319
mutetella_181721 0.35241
Dav1d_181950 0.39237
bwbg_182338 0.41221
bwbg_182126 0.70922
y= 3, x= 15000, number= 1000
miracle173_202027_2 0.08972
miracle173_202027_1 0.11269
snafu_182202 0.34821
Dav1d_182320 0.40508
Dav1d_182334 0.59858
snafu_181957 1.82742
Dav1d_181950 2.62524
mutetella_181721 2.69560
bwbg_182338 2.80531
bwbg_182126 4.14226
y= 30, x= 15000, number= 1000
miracle173_202027_1 0.12555
miracle173_202027_2 0.12678
Dav1d_182320 0.18892
snafu_182202 0.23194
Dav1d_182334 0.33664
snafu_181957 1.86588
bwbg_182338 2.58252
mutetella_181721 2.58951
Dav1d_181950 2.60893
bwbg_182126 4.21309
y= 30, x= 1500000, number= 10
miracle173_202027_2 0.20204
miracle173_202027_1 0.20374
Dav1d_182320 0.56383
snafu_182202 0.61003
Dav1d_182334 0.70914
snafu_181957 2.18486
bwbg_182338 2.75590
Dav1d_181950 2.95452
mutetella_181721 3.06151
bwbg_182126 4.64647
Hier ist das Testskript
Code: Alles auswählen
import timeit, itertools; from itertools import cycle, islice
code={
'mutetella_181721': '[e + (0 if i % y else 1) for i, e in enumerate([0] * x, 1)]',
'Dav1d_181950': 'list(((0 if i % y else 1) for i, _ in enumerate(itertools.repeat(0, x), 1)))', #list
'snafu_181957': '[(0 if i % y else 1) for i in range(1, x + 1)]',
'bwbg_182126': 'list((lambda n, xs: (e for _, e in zip(range(n), xs)))(x, (lambda t: ((0 if i % t else 1) for i in itertools.count(1)))(y)))',
'snafu_182202': 'list(itertools.islice(itertools.cycle([0] * (y - 1) + [1]), x))', #list
'Dav1d_182320': 'list(itertools.chain.from_iterable(itertools.repeat([0] * (y - 1) + [1], x//y)))',
'Dav1d_182334': 'list(itertools.islice(itertools.chain.from_iterable(zip(*(([itertools.repeat(0)]*(y-1)) + [itertools.repeat(1)]))), x))', # list, kein izip
'bwbg_182338': 'list(itertools.islice((lambda t: ((0 if i % t else 1) for i in itertools.count(1)))(y), 0, x))',
'miracle173_202027_1': '([0]*(y-1)+[1])*(x//y)+[0]*(x%y)',
'miracle173_202027_2': '(([0]*(y-1)+[1])*-(-x//y))[:x]',
}
def test_functions(y,x,number):
measurement=[[timeit.timeit(code[k],'x='+str(x)+';y='+str(y),number=number),k] for k in code]
print()
print('y= %d, x= %d, number= %d'%(y,x,number))
for pair in sorted(measurement):
print('%-25s %10.5f'%(pair[1],pair[0]))
y=3
x=7
print('test: y=%d, x=%d'%(y,x))
for k in code:
z=eval(code[k])
print(z,k)
print()
test_functions(3,15,100000)
test_functions(3,15000,1000)
test_functions(30,15000,1000)
test_functions(30,1500000,10)