Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Joukot ja Tuplet | Tietorakenteiden Tehokas Käyttö
Optimointitekniikat Pythonissa

bookJoukot 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}')
copy

Vertaillaan nyt joukon ja listan suorituskykyä jäsenyyden testauksessa:

12345678910111213141516171819
import 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))
copy

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'
copy

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?

question mark

Mihin seuraavista tilanteista joukkoa kannattaa käyttää listan sijaan?

Select the correct answer

question mark

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?

Select the correct answer

question mark

Luot tietueen jokaiselle opiskelijalle, joka sisältää yksilöllisen tunnisteen, etunimen ja sukunimen. Tietoja ei tule muuttaa luomisen jälkeen. Mikä tietorakenne olisi sopivin?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

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

bookJoukot 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}')
copy

Vertaillaan nyt joukon ja listan suorituskykyä jäsenyyden testauksessa:

12345678910111213141516171819
import 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))
copy

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'
copy

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?

question mark

Mihin seuraavista tilanteista joukkoa kannattaa käyttää listan sijaan?

Select the correct answer

question mark

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?

Select the correct answer

question mark

Luot tietueen jokaiselle opiskelijalle, joka sisältää yksilöllisen tunnisteen, etunimen ja sukunimen. Tietoja ei tule muuttaa luomisen jälkeen. Mikä tietorakenne olisi sopivin?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 2
some-alt