Joukot ja Tuplet
Ennen kuin siirrymme joukkoihin (set) ja tupliksiin (tuple), on tärkeää mainita, että sanakirjoja (dictionaries) ei käsitellä tässä.
Joukko (Set)
Joukko tarjoaa keskimäärin O(1) aikavaativuuden lisäyksille, poistoille ja haulle, mikä tarkoittaa, että nämä operaatiot suoritetaan vakioajassa joukon koosta riippumatta. Tämä tekee joukoista huomattavasti nopeampia kuin listoista jäsenyyden tarkistuksessa sekä elementtien lisäämisessä tai poistamisessa, joissa listoilla on O(n) aikavaativuus (aika kasvaa lineaarisesti listan koon mukaan) pahimmassa tapauksessa.
Käyttökohteet:
- Tarvitaan yksilöllisiä alkioita, jolloin kokoelmassa ei ole duplikaatteja;
- Nopea jäsenyyden tarkistus on tarpeen, mikä tekee joukoista ihanteellisia esimerkiksi alkion olemassaolon tarkistamiseen;
- Suoritetaan operaatioita kuten joukkojen yhdisteet, leikkaukset tai erotukset, joita joukot tukevat optimoiduilla menetelmillä;
- Järjestyksellä ei ole merkitystä, sillä joukot ovat luonteeltaan järjestämättömiä eikä lisäysjärjestystä tarvitse säilyttää.
1234567891011121314151617181920# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
Vertaillaan nyt joukon ja listan suorituskykyä jäsenyyden testauksessa:
12345678910111213141516171819import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
Tuple
Tupleja käytetään tyypillisesti, kun tiedon muuttumattomuus on varmistettava tai kun niitä käytetään avaimena dict-sanakirjassa tai alkiona set-joukossa (koska tuplet ovat hashattavia).
-
Parempi kuin listat: kun tarvitaan muuttumatonta dataa, halutaan käyttää kokoelmaa sanakirjan avaimena tai joukon alkiona, tai kun tarvitaan muistitehokasta tallennusta kiinteän kokoiselle tietojoukolle;
-
Parempi kuin NumPy-taulukot: kun data on ei-numeerista tai kun muuttumattomuus on olennaista. NumPy-taulukot on suunniteltu numeerisiin laskutoimituksiin ja ovat oletuksena muutettavissa, kun taas tuplet tarjoavat turvallisuutta ei-numeeriselle datalle tai pienille, rakenteisille kokoelmille, joiden on pysyttävä muuttumattomina.
12345678# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
Koska students-lista sisältää opiskelijatietueita (ID, etunimi, sukunimi), joiden tulee olla vain luku -muodossa, on parempi käyttää tupleja jokaisessa tietueessa listojen sijaan. Lisäksi, kuten yllä mainittiin, tuplet ovat hieman muistitehokkaampia kuin listat.
1. Mihin seuraavista tilanteista joukkoa kannattaa käyttää listan sijaan?
2. Sinulla on miljoonia tietueita sisältävä tietoaineisto ja sinun täytyy usein tarkistaa, löytyykö tietty arvo siitä. Mikä tietorakenne on tähän tarkoitukseen tehokkain?
3. Luot tietueen jokaiselle opiskelijalle, joka sisältää yksilöllisen tunnisteen, etunimen ja sukunimen. Tietoja ei tule muuttaa luomisen jälkeen. Mikä tietorakenne olisi sopivin?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain more about when to use sets versus lists?
What are some common use cases for tuples?
Can you show more examples of set operations?
Awesome!
Completion rate improved to 7.69
Joukot ja Tuplet
Pyyhkäise näyttääksesi valikon
Ennen kuin siirrymme joukkoihin (set) ja tupliksiin (tuple), on tärkeää mainita, että sanakirjoja (dictionaries) ei käsitellä tässä.
Joukko (Set)
Joukko tarjoaa keskimäärin O(1) aikavaativuuden lisäyksille, poistoille ja haulle, mikä tarkoittaa, että nämä operaatiot suoritetaan vakioajassa joukon koosta riippumatta. Tämä tekee joukoista huomattavasti nopeampia kuin listoista jäsenyyden tarkistuksessa sekä elementtien lisäämisessä tai poistamisessa, joissa listoilla on O(n) aikavaativuus (aika kasvaa lineaarisesti listan koon mukaan) pahimmassa tapauksessa.
Käyttökohteet:
- Tarvitaan yksilöllisiä alkioita, jolloin kokoelmassa ei ole duplikaatteja;
- Nopea jäsenyyden tarkistus on tarpeen, mikä tekee joukoista ihanteellisia esimerkiksi alkion olemassaolon tarkistamiseen;
- Suoritetaan operaatioita kuten joukkojen yhdisteet, leikkaukset tai erotukset, joita joukot tukevat optimoiduilla menetelmillä;
- Järjestyksellä ei ole merkitystä, sillä joukot ovat luonteeltaan järjestämättömiä eikä lisäysjärjestystä tarvitse säilyttää.
1234567891011121314151617181920# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
Vertaillaan nyt joukon ja listan suorituskykyä jäsenyyden testauksessa:
12345678910111213141516171819import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
Tuple
Tupleja käytetään tyypillisesti, kun tiedon muuttumattomuus on varmistettava tai kun niitä käytetään avaimena dict-sanakirjassa tai alkiona set-joukossa (koska tuplet ovat hashattavia).
-
Parempi kuin listat: kun tarvitaan muuttumatonta dataa, halutaan käyttää kokoelmaa sanakirjan avaimena tai joukon alkiona, tai kun tarvitaan muistitehokasta tallennusta kiinteän kokoiselle tietojoukolle;
-
Parempi kuin NumPy-taulukot: kun data on ei-numeerista tai kun muuttumattomuus on olennaista. NumPy-taulukot on suunniteltu numeerisiin laskutoimituksiin ja ovat oletuksena muutettavissa, kun taas tuplet tarjoavat turvallisuutta ei-numeeriselle datalle tai pienille, rakenteisille kokoelmille, joiden on pysyttävä muuttumattomina.
12345678# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
Koska students-lista sisältää opiskelijatietueita (ID, etunimi, sukunimi), joiden tulee olla vain luku -muodossa, on parempi käyttää tupleja jokaisessa tietueessa listojen sijaan. Lisäksi, kuten yllä mainittiin, tuplet ovat hieman muistitehokkaampia kuin listat.
1. Mihin seuraavista tilanteista joukkoa kannattaa käyttää listan sijaan?
2. Sinulla on miljoonia tietueita sisältävä tietoaineisto ja sinun täytyy usein tarkistaa, löytyykö tietty arvo siitä. Mikä tietorakenne on tähän tarkoitukseen tehokkain?
3. Luot tietueen jokaiselle opiskelijalle, joka sisältää yksilöllisen tunnisteen, etunimen ja sukunimen. Tietoja ei tule muuttaa luomisen jälkeen. Mikä tietorakenne olisi sopivin?
Kiitos palautteestasi!