Kezdőoldal » Számítástechnika » Programozás » Pythonban hogy kell beállítani...

Pythonban hogy kell beállítani, hogy a for ciklus a lista hátuljáról induljon?

Figyelt kérdés
Én úgy tudom, hogy for i in range(-1,len(lista)), de a kiírt adatok alapján ugyanúgy az elején kezdi.
2020. dec. 17. 20:34
 1/9 anonim ***** válasza:
100%

for elem in reversed([lista]):


Bővebben:

[link]

2020. dec. 17. 20:58
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:
6%

Ne használj "for i in range(len......" -t, lépkedj végig az elemeken ahogy az első írta. (Ha mégis így tennél, akkor "for i in range(len(lista) - 1, -1, -1):" lenne, de NE MERÉSZELD így használni. A 3. paraméter mondja meg, hogy mínuszegyesével lépkedsz.

Egy másik hasznos funkció a listák szeletelése (slicing): a "lista[::-1]" a listád fordított másolatát adja. Lásd: [link]

2020. dec. 18. 00:10
Hasznos számodra ez a válasz?
 3/9 anonim ***** válasza:
73%
#2 egészen pontosan miért ne merészeljen használni egy beépített nyelvi elemet? Rengeteg szituáció van amikor nem is működik a lista megfordítása - arról nem is beszélve, hogy a lista megfordítása sincs ingyen, és nem is feltétlenül szeretnéd a listát megfordítani, lehet hogy csak egy műveletet akarsz így elvégezni. De gondolom a ciklus után hívjon még egy reversed()-et, csinálsz még ezer ilyet aztán sírsz hogy milyen rohadt lassú a python. Próbálj meg pl végigugrálni az elemeken és törölni őket a cikluson belül, jó móka lesz hátrafelé lépkedés nélkül. Azért range(), mert intervallumot vár, ívesen leszarja hogy merről merre haladsz.
2020. dec. 18. 01:09
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
19%
Mondjuk mert elég kifordított logika a más nyelvekben foreach ciklusnak nevezett szerkezetet számlálóval használni? Ha Pythont tanul, miért tanulna pl. C logikával programozni? Miért kéne még egy reversed()? Nyilván nem igaz, hogy soha sincs helye a for i in range-nek, de hogy Pythonban nem ez a legjobb megoldás, az a legtöbbször biztos. Ha feltétlenül kell az index, még mindig ott van az enumerate(), ami nem triviális példákban sokszor gyorsabb, mint a range(len()) és az indexnél lévő érték lekérése a listából.
2020. dec. 18. 01:58
Hasznos számodra ez a válasz?
 5/9 zozo256 ***** válasza:
100%

Alapvetően amikor visszafele iterálsz a reversed segítségévével akkor lényegében a listából (vagy egyéb kollekcióból) képzett reversediterator-on iterálsz végig pontosan. És valószínűleg, bár ebben most nem vagyok 100%-ig biztos, de szerintem a reversediterator-oknak a __next__ metódusa úgy van implementálva, hogy hátulról kezdi az indexelést, és minden iterációlépésnél csökkenti az indexet és így valósítja meg a visszafele iterációt.

Ha van aki tud erről valamit, akkor az érdekelne, gyors googlizás után most nem találtam kielégítő választ erre.

2020. dec. 18. 10:34
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:
100%

Minden beépített nyelvi elemet szabad használni. Azon lehet lamentálni hogyha egy adott dologra több közül is lehet választani valamit akkor melyiket érdemesebb.

A lista[::-1] megfordítása csupán a fordítva bejárás miatt több overhead-al jár mint indokolt lenne. Hiszen létrehoz belőle egy fordított másolatot amit így is úgy is be kell járni, hiszen ez a cél, de ha nem is megy végig rajta mert van a cikluson belül egy if break, akkor a fordított lista többi része fel sincs használva semmire, de mégis le kellett gyártani.

A reversed csinál egy list_reverseiterator objektumot ami igen valóban úgy van implementálva hogy nem másolja le a listát csak végig vagy ameddig léptetjük addig iterál rajta hátulról előre haladva.

Beépített nyelvi elemként natív kódban implementálva c-ben: [link]

A 3080-as sortól ezen forráskód végéig ezen iterátor implenetációja van.

2020. dec. 18. 13:16
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:
31%

Jólvan, látom itt olyan született programtervező informatikusok vannak, akik a foreach ciklusba is számlálót tesznek (kivéve 1. 5. 6. mert ők látják a lényeget). Lehet, hogy kevés volt a Greenfox? :((( Az se zavarjon meg senkit, hogy a reversed()-et javasoltam neki én is, és egyedül én mutattam meg a range "helyes" használatát a hátulról lépkedésre. Összedobtam egy egyszerű példát, amiben az enumerate() 20%-kal gyorsabb volt néhány elem feltételes cseréjénél, mint az index alapján történő lekérdezés, ha valamiért olyan nagyon kéne neki az az index. És ez csak egy szándékosan gyökér példa. Szóval nem én fogok sírni a sebesség miatt. De használjátok csak bátran a range(len())-t, addig sem kell féltenem az állásomat... :'D

U.i.: ha azt írom, hogy a [::-1] egy másolatot ad, az szerintem egyértelmű hogy nagyobb overheadet jelent egy reversediteratorhoz képest...

2020. dec. 18. 14:50
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:
46%
#7 leírhatod még ötször, senki sem javasolta hogy csináljon másolatot a listáról - illetve de, te említetted mint "másik hasznos funckió" (hasznosnak mondjuk tényleg hasznos, csak épp nem ebben a szituációban). Arról ment az értekezés, hogy égbekiáltó bűn-e visszafelé indexelve végigmenni egy listán\tömbön\akármin, mert hogy "NE MERÉSZELD ÍGY HASZNÁLNI" - és egyébként kezdve ezzel, de a többi hozzászólásod is úgy jön le mint amikor egy gyerek földhöz vágja magát és üvölt, hogy márpedigakkorisúgyvanahogymondom. Ha ez volt a cél akkor persze szép munka.
2020. dec. 18. 19:20
Hasznos számodra ez a válasz?
 9/9 anonim ***** válasza:
Csodálom, hogy ilyen szövegértéssel számítástechnika > programozás kategóriában válaszolgattok, és nem hülye kérdéseket írtok ki. Mint hármaska, aki többször akarja fordítgatni a tömböt, meg a range haladási irányán értetlenkedik a lényeg helyett, hogy a range(len()) az esetek 99%-ában egy kapitális baromság. De hát mit is várhatnék itt a szegény ember stackoverflowján. Baromságokat írtok, aztán megy a circlejerk pontozás, a tanulók meg hátha elhiszik, hogy igazatok van :)))
2020. dec. 19. 19:06
Hasznos számodra ez a válasz?

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!