Hulye ekrdes es nagyon egyszeru, ezt hogy kell megcsinalni pythonban? 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
Ez az igazi egy soros:
print(*((i * f'{i} ')[:-1] for i in range(1, 6)), sep='\n')
Ez nem abuse-olja a list comprehension-t abból a szempontból, hogy nem ül rá a print mellékhatására.
Hát, más dolog a kettő. Amikor stringet int-tel szorzok, az a python-ban azért lett kitalálva, hogy ismételgessük az adott stringet, tehát ebből a szempontból nem abuzálok. Míg egy list comprehension arra, lett kitalálva, hogy gyorsabban, egyszerűbb szintaxissal építsen egy listát. Ebben a feladatban nincsen szükség lista építésére a print-elés szempontjából. Ha REPL-ben futtatjuk a 11-es kódot, akkor láthatjuk is, hogy visszaprintel nekünk egy None-okkal teli listát, amire semmi szükségünk nincs, és ráadásul sehogy nem kötődik az a lista a feladathoz.
Igaz az én kódomban sincs feltétlen szükség generator-t építeni, és azt szétszorni a print argumentumaiba, de itt nincs szó arról, hogy bármilyen python feature nem úgy lett használva, amire tervezve lett.
Kicsit továbbvíve a dolgot. List/set/dict comprehension segítségével igazából szinte tetszőleges python programot egy sorosra tudunk redukálni kb.
[exec(block) for block in blocks]
Ahol a blocks valamilyen container (list, tuple,...), ami tartalmazza az összes kódblokkot (string-ként) ami a legkülső indentációnál kezdődik. A blocks elemeit pedig helyben ki lehet tölteni kód string-ekkel, \n és \t-ket belerakva sortöréshez és indentációhoz.
Sőt kicsit továbbcsavarva az egész kód stringe-et ami a fájlban van mondjuk be lehet adni egyetlen argumentumként az exec-nek, sortörések nélkül, \n és \t használatával.
Na és még ott van az a kérdés, hogy mi számít különböző sornak :D
Tényleg arra gondolunk, hogy a fájl, ami tartalmazza a kódot hány sort tartalmaz, vagy arra, hogy hány értékes kódsor van, pl. line continuation karakterrel ugye össze lehet fűzni két különböző sort, amit már a tokenizer is kiszűr, és ő egy sornak látja.
Szóval nem egyszerű ez az egysoros dolog :D
Mit kell túlbonyolítani?
pár órát fektettem bele, és itt a hatlmas eredmény:
for i in [1, 2, 3, 4, 5] :
print((i) * str(i))
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!