Järjestä usean kentän perusteella
Ratkaise tasatilanteet tuple-avaimilla ja reversellä
Järjestä usean kentän perusteella on ilmainen Competitive Programming Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Competitive Programming Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Competitive Programming Academy-kurssilla on yhteensä 4 oppituntia.
Kun yksi key ei riitä
Joskus alkiot ovat ensimmäisen kentän perusteella tasatilanteessa, joka on ratkaistava. Ratkaisuna on tupla-avain, joka luettelee kentät tärkeysjärjestyksessä.
Tuplat vertailevat vasemmalta oikealle
Python vertailee tupleja alkio kerrallaan: ensin tarkistetaan ensimmäinen alkio, ja toista tarkastellaan vasta, jos ensimmäiset ovat tasan.
print((1, 9) < (1, 2)) # False
print((1, 2) < (2, 0)) # TrueTupla-avain kahdelle kentälle
Palauttakaa key-funktiosta tupla, jos haluatte lajitella ensin ensimmäisen kentän ja sitten toisen. Näin henkilöt lajitellaan iän ja sen jälkeen nimen mukaan.
people.sort(key=lambda p: (p.age, p.name))Ensisijainen ja toissijainen järjestys
Vasemmanpuoleinen kenttä määrittää ensisijaisen lajittelun ja seuraava kenttä ratkaisee tasatilanteet. Vaihtamalla tuplan järjestystä muutatte sitä, kumpi kenttä määrää.
data = [(2, "b"), (1, "z"), (1, "a")]
print(sorted(data))
# [(1, 'a'), (1, 'z'), (2, 'b')]Yhdistäkää nouseva ja laskeva järjestys
Jos haluatte järjestää yhden kentän nousevasti ja toisen laskevasti, negatoikaa tupla-avaimessa se numeerinen kenttä, jonka haluatte laskevaan järjestykseen.
items.sort(key=lambda x: (x.group, -x.score))Negaatio toimii vain luvuilla
Miinusmerkkitemppu toimii vain luvuilla. Merkkijonokentän kääntämiseksi teidän on ketjutettava lajitteluja negatoimisen sijaan.
Vakaa lajittelu mahdollistaa ketjuttamisen
Koska lajittelu on vakaa, voitte lajitella ensin toissijaisen avaimen ja sitten ensisijaisen avaimen, jolloin tasatilanteet pysyvät oikeassa järjestyksessä.
rows.sort(key=lambda r: r.name)
rows.sort(key=lambda r: r.age, reverse=True)Ketjutus vai yksi tupla
Yksi tupla-avain on yksinkertaisissa tapauksissa nopeampi ja selkeämpi. Ketjutetut lajittelut ovat hyödyllisiä, kun yksi kenttä lajitellaan merkkijonona nousevasti ja toinen laskevasti.
itemgetter nopeutta varten
Indekseihin perustuville tupleille itemgetter on selkeä ja nopea key. Se poimii useita kenttiä kerralla prioriteettijärjestyksessä.
from operator import itemgetter
rows.sort(key=itemgetter(1, 0))Tasatilanteen ratkaisijat tekevät tulosteesta deterministisen
Viimeisen yksilöllisen tasatilanteen ratkaisijan, kuten id:n, lisääminen tekee tulosteesta saman jokaisella suorituskerralla. Tiukat tarkistimet arvostavat tätä.
Suunnitelkaa key ennen koodausta
Lukekaa tehtävä ja kirjoittakaa lajittelukentät tärkeysjärjestykseen. Selkeä tupla-avain muuttaa monimutkaisen vertailun yhdeksi lyhyeksi riviksi.
Pikatarkistus
Haluatte lajitella opiskelijat arvosanan mukaan nousevasti ja sitten nimen mukaan nousevasti.
Kertaus
Voitte ratkaista tasatilanteet tupla-avaimella, käyttää lukujen negaatiota laskevaan järjestykseen ja ketjuttaa vakaita lajitteluja eri suuntien yhdistämiseksi. Tasatilanteen ratkaisijat pitävät tulosteen siistinä. ✅
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Järjestä usean kentän perusteella” ilmainen?
Kyllä – oppitunnin ”Järjestä usean kentän perusteella” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Competitive Programming Academy-kurssin, päivitä CoddyKit PROhon. Competitive Programming Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Järjestä usean kentän perusteella”?
Ratkaise tasatilanteet tuple-avaimilla ja reversellä Harjoittelet Competitive Programming Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Competitive Programming Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Competitive Programming Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Järjestä usean kentän perusteella”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Competitive Programming Academy-oppitunnilla?
Kyllä. Jokainen Competitive Programming Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- sorted() ja key-funktio
- Järjestä usean kentän perusteella
- Mukautettu järjestys functools.cmp_to_keyillä
- Miksi lajittelu ensin avaa ratkaisuja