Python 0,1 átírása true, false-ra?
Természetesen ha nem mértem volna le, akkor nem írtam volna be, de ezt szerintem gondoltad amúgy is. A 2 legutolsó kód:
python -m timeit "''.join([str(bool(int(ch))) for ch in '10111010101'])"
1000 loops, best of 3: 340 usec per loop
python -m timeit "''.join([{'0':'False', '1':'True'}[ch] for ch in '10111010101'])"
10000 loops, best of 3: 82.9 usec per loop
Lássuk a nyers adatokat. A visszafejtett kódot itt megtalálod: [link]
A 13-as címig mindkettő megegyezik, itt kezdődik az iteráció. A 19-28 címeken ki kell keresni az aktuális névtérből 3 függvényt, meg 1 változót. Az utóbbi elkerülhetetlen persze. A 31-37. címen pedig meghívogatjuk őket.
Namost A dict-et használó kód visszafejtve gyorsabb, viszont az a helyzet, hogy dict készítésre külön opcode van (19. cím). Látszik a 22-35 címeken ahogy létrejön a dict. Ez hosszúnak tűnik, viszont konstansokat kell a dictbe eltárolni, tehát ez nagyon gyorsan történhet. Miután elkészült a dict, átlag O(1) sebességgel találunk majd a ch kulcshoz értéket. Ez nem véletlenül van így, a dict és a set nagyon hasonló működésű, hash alapú az értékek keresése. A 39. címen keresi ki a kód a [ch]-hoz tartozó értéket. Utána minden ugyan olyan mint az első helyzetben.
Azaz a lényeg az, hogy létrehozni minden karakternél 1 dictet gyorsabb, mint kikeresni 3 függvényt és meghívni őket. Így hogy ezt megállapítottuk érdemes kivenni a dict létrehozást az iterációból, így nem kell minden karakterre új dictet létrehozni:
python -m timeit "_dict = {'0':'False', '1':'True'}" "''.join([_dict[ch] for ch in '10111010101'])"
10000 loops, best of 3: 51.3 usec per loop
Még nyertünk 31,6 usec-et.
#11 vagyok
Amúgy mikrooptimalizációról beszélünk és bár szerintem a dict-es kódom ugyan úgy érthető mint iostream-é, ekkora mértékeknél azt használsz ami neked jól esik
aardvark, 1,0,0,1,0,0,1,1,1,1,0,0,4,0,0,1,1
antelope, 1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1
bass, 0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4
bear, 1,0,0,1,0,0,1,1,1,1,0,0,4,0,0,1,1
boar, 1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1
buffalo, 1,0,0,1,0,0,0,1,1,1,0,0,4,1,0,1,1
calf, 1,0,0,1,0,0,0,1,1,1,0,0,4,1,1,1,1
carp, 0,0,1,0,0,1,0,1,1,0,0,1,0,1,1,0,4
catfish, 0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4
cavy, 1,0,0,1,0,0,0,1,1,1,0,0,4,0,1,0,1
cheetah, 1,0,0,1,0,0,1,1,1,1,0,0,4,1,0,1,1
chicken, 0,1,1,0,1,0,0,0,1,1,0,0,2,1,1,0,2
chub, 0,0,1,0,0,1,1,1,1,0,0,1,0,1,0,0,4
clam, 0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,7
Ilyen a formátum, és a 14, ill. 18-as oszlopot kivéve kéne átírni
Igyekeztem érthető lenni:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!