Új hozzászólás Aktív témák
-
EQMontoya
veterán
válasz
Siriusb
#1956
üzenetére
Kicsit szebb megoldas, ha letre sem hozod a felesleget.
Van egy defaultdict nevu cucc, ez pl. pont jo arra, amire Neked kell.
A kulcs egy touple, ami azokbol a dolgokbol all, amik egyezese eseten a ket sor egyformanak szamit, az ertek pedig az osszes tobbi olyannak a listaja, amit tenylegesen valtoztatsz.
d = defaultdict(list)
d[(key1, key2)] = [value1, value2]
d[(key1, key2)][1] = value3Ez azert jo, mert a memoriaban sem tarolsz N felesges objektumot, mindig csak az utolsot.
A vegen csak vegigiteralsz a kollekcion, visszaallitod belole a megfelelo sorokat, es kesz.
-
EQMontoya
veterán
-
EQMontoya
veterán
-
EQMontoya
veterán
Azert ezt elegansabban map fuggveny vagy list comprehension hasznalataval szoktak megoldani, illetve typecheck-re isinstance inkabb, hogy oroklodes eseten ne szopassuk be magunkat. Pl. a bool az intbol szarmazik. Szoval valahogy igy:
new_items = [x if isinstance(x, int) else 0 for x in items] -
EQMontoya
veterán
-
EQMontoya
veterán
Hat ez ugy nez ki, hogy az algo trading zome C/C++ alalpu, igencsak gyors rendszereken megy keresztul, es magukat az algoritmusokat irjak Pythonban, mert abban konnyu fejleszteni.
A Python abbol a szempontbol tok jo, hogy nagyon sok dolgot konnyen meg lehet benne csinalni, de nyilvan nem ez adja a leggyorsabb gepi kodot...

-
EQMontoya
veterán
válasz
kovisoft
#1742
üzenetére
Hat kulturaltabb volna a db-bol kiolvasott intbol timedelta ojjektumot csinalni, aztan utana normalisan (< illetve > operatorral) megirni a kodot.

Janos46: termeszetesen van.
-
EQMontoya
veterán
Nem a Python verziók között lesz különbség, hanem a filerendszer, filecache szintjén.
Winen valszeg az történik, hogy a soha be nem zárt fileodba nem íródik ki az adat, mert csak a zárás ürítené ki a file cachet, és írná ki a tartalmát, linuxon ugyanez simán működhet másképp.
-
EQMontoya
veterán
-
EQMontoya
veterán
C++-ban a sima set mögött ugye RB tree van, így a string < operátorával pontosan szófa épülne belőle std::set használata esetén, pythonban viszont nincs ilyen kollekció alapból (a set ugye itt hash alapú), olyannal meg nem akartam traktálni a kedves usert, amihez esetleg kell valami további modul.
-
EQMontoya
veterán
Én azt csinálnám, hogy a kisebbet benyalnám fixen egy setbe (az ugye elég gyorsan kereshető), majd a nagyobbat olvasnám végig soronként, és ha benne van a beolvasott sor a setben, akkor elmenteném/kírnám, hogy van metszet.
Kódban:
words = set()
with open(kisfile) as kf:
for line in kf:
words.add(line)
with open(nagyfile) as nf:
for line in nf:
if line in words:
print "Yahoo!!!" -
EQMontoya
veterán
Valami ilyesmire lesz szükséged:
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
args = shlex.split(command_line)
print args['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
p = subprocess.Popen(args) # Success!Az fontos, hogy popen hívásnál NEM textként, hanem listaként adjuk át az argumentumokat, mint a példában látható.
-
EQMontoya
veterán
válasz
AeSDé Team
#1398
üzenetére
Itt az elvárásokkal is lesz probléma. A Python egy script nyelv, nincs fordító, tehát kicsit macerásabb az IDE-nek összeszedni, hogy milyen változói/függvényei vannak egy adott ojjektumnak. Főleg, hogy bárhol nekiugorhatsz bármiféle monkey patchinggel.
-
EQMontoya
veterán
válasz
K1nG HuNp
#1391
üzenetére
Akkor kicsit nézzük tudományosan, hogy mit szeretnél visszaadni.
A függvényed visszatérési értéke egy tuple. Ami egy darab objektum, rendelkezik n (jelen esetben 3) elemmel.
Amit Te csinálni szeretnél, az az, hogy ezt visszakapott tuplet nem egyben szeretnéd átadni argumentumként, hanem külön-külön.Tehát:
x=some_func(...)
print(“{}, {}, {}”.format(x[0], x[1], x[2])Ez ugye így nem jó, mert egy tuplet adunk át:
x=some_func(...)
print(“{}, {}, {}”.format(x))De a Python szerencsére tud olyat, hogy egy listát át tudsz adni úgy egy függvénynek, hogy minden eleme egy külön argumentum lesz.
Ha láttál már más nyelven variadic arg. függvényt, na ez az.
Erre való a *.
Így ni:print(“{}, {}, {}”.format(*some_func()))Ilyet lehet csinálni dicttel is.
Pl.
some_dict={"egy": "1", "ketto": "2"}
some_func(**some_dict)Ez egyenlő a következővel:
some_func(egy=1, ketto=2) -
EQMontoya
veterán
válasz
concret_hp
#1284
üzenetére
No offense, de amennyit magyaráztad itt, már rég megírhattad volna.

-
EQMontoya
veterán
válasz
cousin333
#1202
üzenetére
Az első fele jogos.

Viszont Az a+b egy számot ad eredményül, ami nem azonos a True-val..
A True is egy szám!
Pythonban a boolean az intből származik, tehát ha leírjuk, hogy isinstance(True, int), az bizony True-t ad vissza.
Hovatovább, teljesen valid kifejezés az, hogy 5 + True, és minden bizonnyal 6 lesz a végeredménye. -
EQMontoya
veterán
válasz
Orionhilles
#1196
üzenetére
Nem kell a "== True", csak zavar az éterben.
De a fő probléma az, hogy ha itt lemész az 5.15 (operator precedence) részhez:
Operator Description
lambda Lambda expression
if – else Conditional expression
or Boolean OR
and Boolean AND
not x Boolean NOT
in, not in, is, is not, <, <=, >, >=, <>, !=, == Comparisons, including membership tests and identity tests
| Bitwise OR
^ Bitwise XOR
& Bitwise AND
<<, >> Shifts
+, - Addition and subtractionAkkor látszik, hogy a relációsjel precedenciája nagyobb az összeadásénál.
Tehát ez fog történni a kódodban:
(a<b)+c == True.
Namost ez egy oltári baromság, de nézzük, hogy mit csinál:
(a<b) -> True
True + c -> bool + int, a bool konvertálódik intté, tehát c+1 a végeredmény.
c+1 == True -> nem, az előző miatt C nagyobb, mint 1. -
EQMontoya
veterán
válasz
kezdosql
#1175
üzenetére
Trollkodtam alapvetően, ahhoz képest egész jó.

argument: argumentum, amit a paranccsorban átadunk. Pl. ilyen szokott lenni: --file joska.txt --force
prompt: parancssor.
sequence unpacking: egy szekvenciát tömörítesz ki, tehát egy változó segítségével végigiterálsz valamit, ami több elemet tartalmaz.
shortcut operators: rövidzárnak hívjuk magyarul. A logikai és (Pythonban: "and") és a logikai vagy (Pythonban: "or") úgy működnek, hogy ha az első kifejezés értékéből egyértelműen következik az eredmény, akkor nem értékeli ki a másikat. Itt írnak róla valamennyit.
slice notation: ez arra való, hogy egy kollekció X. és Y. elemei közötti részt tudod vele kiszedni. Pl. egy string 3.-tól 8. betűjéig tartó substringet.
string literal: egy szöveget tartalmazó konstans gyakorlatilag
tuple: több elemből álló kollekció, amely nem módosítható.
-
EQMontoya
veterán
válasz
kezdosql
#1172
üzenetére
argument: --...
handler (exeption-nel fordul elo): except:
List Comprehensions: [x for x in ... if ...]
prompt: ~
right-hand side expression: ami jobb oldalt van
sequence unpacking: for x in ...
shortcut operators: && illetve ||
slice notation: X[y:z]
string-literal: "..."
tuple: (..., ..., ...) -
EQMontoya
veterán
válasz
Mr Dini
#1087
üzenetére
Hejj, itt igen komoly problémák vannak.
droid = android.Android()
esetben itt ugye történik egy függvényhívás, meghívod az Android nevű függvényt, ami vissza Néked egy cukcsimukcsi ojjektumot, aminek van makeToast tagfüggvénye.A másik esetben, amikor ezt csinálod:
from android import Android as droid
droid.makeToast(...)
Itt magán az Android függvényen, mint objektumon próbálsz meg függvényhívást végezni, az meg nyilván nem adja ki. A milói Vénusz bal lába sem illik a Dávid szoborra, pedig ugye szobor-szobor.
Így menni fog ebben az esetben is:droid().makeToast(...) -
EQMontoya
veterán
válasz
velizare
#1033
üzenetére
Azért, mert a tunnel __init__ fv-e (amit meghív a with) nem hívja meg a startot.
with sshtunnel.SSHTunnelForwarder(
('jumpserver', 22),
ssh_username="username",
ssh_password="password",
remote_bind_address=('remotehost',1521),
local_bind_address=('127.0.0.1',1521)
) as tunnel:
tunnel.start() -
EQMontoya
veterán
válasz
pbalintka
#952
üzenetére
Egy integer 24 byte-ot foglal le, míg a None csak 16-ot. Nem sok de, nagyobb programnál számítani fog.
No ezt azért gondoljuk már át még kétszer.

Kis olvasnivaló, ezt a részt ajánlom figyelmedbe:
The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behaviour of Python in this case is undefined. :-)
Pythno3-ban már kicsit másképp működik, de az, hogy pontosan hány int(1) objektumod van a rendszerben, illetve hány referenciád azokra, az közel sem olyan triviális, mint ahogy azt Móricka gondolta.
-
EQMontoya
veterán
válasz
cousin333
#933
üzenetére
Hát ha utóbbit akarsz csinálni, arra van ugye enumerate meg ilyesmi.

Egyébként mostanság olvastam elég sok python kódot, és az az érzésem, hogy a legtöbben C-t írnak, csak nem annyira típusos, és python interpreterrel futtatják. Mindent, ami megvan egyébként a nyelvben a for ciklusok elkerülésére (map, filter, reduce, any, all, stb), azt szépen megírják kézzel.
-
EQMontoya
veterán
válasz
cousin333
#906
üzenetére
Az angol nem para, köszönöm a tippeket!
Igazság szerint programozni egyetemen tanultam, főleg C-t, C++, kis Java, C#, basht már magamtól, aztán utána Python, JS már ment tutorial alapján is, mert sok mást láttam. Szóval halvány fogalmam sincs, hogy milyen egy kezdőnek ajánlható könyv, sosem tanultam könyvből programozni. -
-
EQMontoya
veterán
Szerintem csak úgy, hogy ha le tudod valamilyen úton-módon kérdezni, hogy mi van fent a honlapon. Pl. rest api, vagy egy sima http get, aztán
regexxel parse-olsz htmltépítesz belőle egy szép kis DOMot, és kitúrod belőle az adat.Ezt az adatot összeveted a mappád tartalmával, és ha van a mappában olyan, ami már fent van, akkor move. Az egészet meg lehet egy timerre / cron jobra kötni.
-
EQMontoya
veterán
Tisztában vagyok vele, voltam pár progverseny döntőjében (Ericsson, NNG, stb), és hidd el, sokat tud számítani a megfelelő algoritmus megtalálása után némi bitbaszkurálás, amivel mondjuk 3 óráról leviszed a futási időt félre.

A legutóbbi nagyobb cucc, amit Pythonban csináltam, több gigás logfile-okat parse-ol fel. Nem árt ésszel csinálni.
-
EQMontoya
veterán
Ebbe most futottam bele, kellett egy dict, ami a c++-os maphez hasonlóan működik, és megtaláltam az ehhez kellő python függvényt:
setdefault(key[, default])¶
If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.Asszem, mind az elnevezésért, mind a leírásért járna a nyers hal a készítőknek.
-
EQMontoya
veterán
válasz
Orionhilles
#855
üzenetére
int(n) -> integerré konvertálja n-t, ami esélyesen string. Legalábbis gondolom.
Ez elég csúnya megoldás, mert ez dobhat exception-t, és ez esetben nem írsz ki semmit.A [:n] (itt n már ugye int) pedig annyit fog csinálni, hogy 0 és n-1. karakter közötti részét kiírja a stringednek.
-
EQMontoya
veterán
válasz
DrojDtroll
#736
üzenetére
Popen nevű hívást nézd meg!
-
EQMontoya
veterán
Tudsz olyat, hogy megadsz rövidebb verziót az argparse-nak.
Pl. így:
parser.add_argument('--debug','-d', dest='debug', action='store_true', help='Debug - print the structure of order')
parser.add_argument('--profile','-p', dest='profile', action='store_true', default=False, help='Show time spent in each phases')
parser.add_argument('--id','-i', help='ID list - separated by \',\'', required=True)mondjuk korábban annyi volt, hogy csak beírtam a számértékeket megfelelő sorrendben
Persze, így viszont nem tudsz opcionális argumentumokat megadni.
Tehát ezzel így az a baj, hogy mondjuk akkor is ki kell ínrod mindhármat, ha mondjuk 17 szögmásodpercet szeretnél átváltani. -
EQMontoya
veterán
Kimaradt a dest, nem tudja hová tárolni, így nem fog működni.
parser.add_argument("--degree", dest='degree', help="This program calculate degree to radian.", default=0, type=int)
parser.add_argument("--minute", dest='minute', help="You can add Minute value.", type=int, default=0)
parser.add_argument("--secundum", dest='secundum', help="You can add secundum value.", type=int, default=0)Így már működni fog bármilyen kombinációval, pl. lehet olyan, hogy csak percet adsz meg, vagy fokot és másodpercet, bármi.
Azért van még baj, az egészosztások miatt a percek és a másodpercek nem működnek, de ezt nem lövöm le előre, ebből tanulsz.

-
EQMontoya
veterán
Általánosságban értettem: alapvetően nem szeretünk interaktív programot írni, ami b..tatja a usert, hogy:
-Add meg ezt
-Biztos ezt akarod?
-De tényleg?
-Fűzfán fütyüljek a végén?Akkor inkább: foo --input_file ./bar.txt, --force --fuzfan_futyul
Aztán enter, és megtörténik minden. -
EQMontoya
veterán
válasz
justmemory
#639
üzenetére
#example timestamp: Mar 30 11:49:04.880 - the last part can be milisecs or microsecs (6 digits) as well.
timestamp_regex = re.compile('[A-Z][a-z][a-z] \d+ \d+:\d+:\d+\.\d+')
time_in_line = datetime.strptime(timestamp_regex.findall(msg)[0],"%b %d %H:%M:%S.%f")Szóval ilyenkor ez van.

-
EQMontoya
veterán
válasz
justmemory
#637
üzenetére
Szerintem még kétféle formátumra is elég rusnya lesz.
Kb. megoldások:
-Felismered Te magad, hogy melyik formátum, és ifelsz.
-try strptime(format 1) expect: blabla strptime(format 2)... (azaz megpróbálod az egyikkel, ha nem sikerül, a másikkal is)
-Írsz valami regexet, hogy mi lehet a pattern. Aki nem használt még regexet, az szenvedni fog. -
EQMontoya
veterán
válasz
justmemory
#635
üzenetére
Az egyetlen baja az strptime-nak, hogy flexibilitása szerintem egy márványtömbbel vetekszik.
Ha kicsit is változik az idő kiírásának formátuma, szórja az exceptiont, mint muter a lisztet a rétes alá.
Kivéve, ha írsz egy elég okos regexet a format részbe, de úgy meg már nem sokkal könnyebb használni, mint megcsinálni kézzel.
Az strftime viszont tényleg baba. -
EQMontoya
veterán
válasz
cousin333
#631
üzenetére
Már csak azért sem, mert a rengeteg I/O művelet aligha tesz jót a teljesítménynek.
Az a durva, hogy nem nagyon.
Mostanság dolgoztam egy logminer alkalmazáson, amit pythonban raktam össze, és a sima open + soronkénti iterálásnál cache-el, chunk-kal, mindenhogy próbáltam jobbat írni, de nem sikerült.
Nagyon jól meg van írva alatta az API, és szerintem behúzza memóriába kb. az egész filet.
Pedig néhány gigás textfile-okat olvasgattam, szóval elég jól mérhető lett volna a különbség. -
EQMontoya
veterán
válasz
szaszayanou
#624
üzenetére
Ha jól sejtem, a végén kapsz egy exception-t.

Index <x> is out of bounds.if kiserlet[szamlalo] == "F" and kiserlet[szamlalo+1] == "F":
Itt ugyanis szamlalo+1 simán túlindexel.
További problémák a kóddal, hogy rosszul számolsz.
Mert 'IFFFI' sorozatot beszámítod kétszer, pedig ha jól értem, Neked azok az esetek kellenek, amikor pontosan két fej van egymás mögött.
Új hozzászólás Aktív témák
- Varmilo /Limitált kiadás/Beijing Opera/EN/Silent Red/
- ÁRGARANCIA!Épített KomPhone Ryzen 5 9600X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Honor Magic V5 Black 16/512 GB Újszerű, kipróbált Garancia 2028. 12. 02-ig
- Telefon felvásárlás!! iPhone X/iPhone Xs/iPhone XR/iPhone Xs Max
- LG 27UL500P-W - 27" IPS - 3840x2160 4K - 60Hz 5ms - HDR10 - AMD FreeSync - 300 Nits - sRGB 99%
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: Laptopszaki Kft.
Város: Budapest




