Ich möchte die schnellste Variante finden, um Potenzen zur Basis 10 zu berechnen. Der Exponent kann dabei zwischen 0 und 100 liegen.
5 verschiedene Varianten sind mir eingefallen:
Code: Alles auswählen
def potenz1(a):
b=10**a
return b
def potenz2(a):
b=int('1'+a*'0')
return b
def potenz3(a):
d={ 0 : 1,
1 : 10,
[...die restlichen Möglichkeiten...]
99 : 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}
b=d[a]
return b
def potenz4(a):
if a== 0 :
b= 1
if a== 1 :
b= 10
[...die restlichen Möglichkeiten...]
if a== 99 :
b= 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
return b
def potenz5(a):
if a== 0 :
b= 1
elif a== 1 :
b= 10
[...die restlichen Möglichkeiten...]
elif a== 99 :
b= 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
return b
Code: Alles auswählen
zufall=list(randint(0,99) for i in range(1000000))
for i in zufall:
potenz1(i)
potenz1: 2.68 s
potenz2: 4.09 s
potenz3: 8.38 s
potenz4: 3.07 s
potenz5: 1.62 s
Am schnellstet ist also die elif-Fallunterscheidung, gefolgt von
direkter Potenzierung,
if-Fallunterscheidung,
String-Konstruktion,
Dictionary.
Fallen euch noch andere Varianten ein? Dann kann ich mal deren Laufzeit testen.
Gerade die Stringkonstruktion (potenz2) kann man sicher noch besser machen.
Gruß
Paul