Kezdőoldal » Számítástechnika » Programozás » Python 0,1 átírása true,...

Python 0,1 átírása true, false-ra?

Figyelt kérdés
Ha van egy adathalmazom, amelyben 0-val és 1-el van jelölve az igaz, hamis, azt hogy tudom átírni python segítségével true-ra és false-ra?

2013. máj. 4. 18:28
1 2
 11/15 anonim ***** válasza:
100%

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.

2013. máj. 5. 10:12
Hasznos számodra ez a válasz?
 12/15 anonim ***** válasza:

#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

2013. máj. 5. 10:28
Hasznos számodra ez a válasz?
 13/15 A kérdező kommentje:

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

2013. máj. 5. 11:33
 14/15 anonim ***** válasza:

Igyekeztem érthető lenni:

[link]

2013. máj. 5. 12:01
Hasznos számodra ez a válasz?
 15/15 A kérdező kommentje:
Köszönöm.
2013. máj. 5. 12:21
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!