Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Mengder og Tupler | Effektiv Bruk av Datastrukturer
Optimaliseringsteknikker i Python

bookMengder og Tupler

Før vi går videre med mengder og tupler, er det viktig å nevne at vi ikke vil diskutere ordbøker her.

Mengde

En mengde gir en gjennomsnittlig O(1) tidskompleksitet for innsettinger, slettinger og oppslag, noe som betyr at disse operasjonene utføres i konstant tid, uavhengig av mengdens størrelse. Dette gjør mengder mye raskere enn lister for medlemskapstesting og operasjoner som å legge til eller fjerne elementer, hvor lister krever O(n) tidskompleksitet (tiden øker lineært med størrelsen på listen) i verste fall.

Når det bør brukes:

  • Du trenger unike elementer, og sikrer at det ikke finnes duplikater i samlingen;
  • Rask medlemskapstesting er nødvendig, noe som gjør mengder ideelle for oppgaver som å sjekke om et element finnes;
  • Du utfører operasjoner som mengdeunioner, snitt eller differanser, som støttes av optimaliserte metoder for mengder;
  • Rekkefølge er ikke viktig, siden mengder er iboende uordnede, og det ikke er behov for å opprettholde innsettingsrekkefølge.
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

La oss nå sammenligne ytelsen til et sett med en liste ved medlemskapstesting:

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

Tupler brukes vanligvis når du må sikre at dataene ikke kan endres, eller som en nøkkel i en dict eller et element i et set (fordi tupler er hashbare).

  • Bedre enn lister: når du trenger immutable data, ønsker å bruke samlingen som en ordboknøkkel eller set-element, eller når du trenger minneeffektiv lagring for en samling med fast størrelse;

  • Bedre enn NumPy-arrays: når dataene dine er ikke-numeriske eller når immutabilitet er avgjørende. Mens NumPy-arrays er laget for numeriske beregninger og er mutable som standard, gir tupler sikkerhet for ikke-numeriske data eller små, strukturerte samlinger som må forbli konstante.

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

Siden students-listen inneholder studentoppføringer (ID, fornavn, etternavn) som skal være skrivebeskyttet, er det bedre å bruke tupler for hver oppføring i stedet for lister. I tillegg, som nevnt ovenfor, er tupler litt mer minneeffektive sammenlignet med lister.

1. Hvilket av følgende scenarier egner seg best for bruk av et sett i stedet for en liste?

2. Du har et datasett med millioner av oppføringer og må ofte sjekke om bestemte verdier finnes i det. Hvilken datastruktur er mest effektiv for dette formålet?

3. Du oppretter en post for hver student som inkluderer en unik ID, fornavn og etternavn. Dataene skal ikke endres etter opprettelse. Hvilken datastruktur er mest hensiktsmessig?

question mark

Hvilket av følgende scenarier egner seg best for bruk av et sett i stedet for en liste?

Select the correct answer

question mark

Du har et datasett med millioner av oppføringer og må ofte sjekke om bestemte verdier finnes i det. Hvilken datastruktur er mest effektiv for dette formålet?

Select the correct answer

question mark

Du oppretter en post for hver student som inkluderer en unik ID, fornavn og etternavn. Dataene skal ikke endres etter opprettelse. Hvilken datastruktur er mest hensiktsmessig?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 7.69

bookMengder og Tupler

Sveip for å vise menyen

Før vi går videre med mengder og tupler, er det viktig å nevne at vi ikke vil diskutere ordbøker her.

Mengde

En mengde gir en gjennomsnittlig O(1) tidskompleksitet for innsettinger, slettinger og oppslag, noe som betyr at disse operasjonene utføres i konstant tid, uavhengig av mengdens størrelse. Dette gjør mengder mye raskere enn lister for medlemskapstesting og operasjoner som å legge til eller fjerne elementer, hvor lister krever O(n) tidskompleksitet (tiden øker lineært med størrelsen på listen) i verste fall.

Når det bør brukes:

  • Du trenger unike elementer, og sikrer at det ikke finnes duplikater i samlingen;
  • Rask medlemskapstesting er nødvendig, noe som gjør mengder ideelle for oppgaver som å sjekke om et element finnes;
  • Du utfører operasjoner som mengdeunioner, snitt eller differanser, som støttes av optimaliserte metoder for mengder;
  • Rekkefølge er ikke viktig, siden mengder er iboende uordnede, og det ikke er behov for å opprettholde innsettingsrekkefølge.
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

La oss nå sammenligne ytelsen til et sett med en liste ved medlemskapstesting:

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

Tupler brukes vanligvis når du må sikre at dataene ikke kan endres, eller som en nøkkel i en dict eller et element i et set (fordi tupler er hashbare).

  • Bedre enn lister: når du trenger immutable data, ønsker å bruke samlingen som en ordboknøkkel eller set-element, eller når du trenger minneeffektiv lagring for en samling med fast størrelse;

  • Bedre enn NumPy-arrays: når dataene dine er ikke-numeriske eller når immutabilitet er avgjørende. Mens NumPy-arrays er laget for numeriske beregninger og er mutable som standard, gir tupler sikkerhet for ikke-numeriske data eller små, strukturerte samlinger som må forbli konstante.

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

Siden students-listen inneholder studentoppføringer (ID, fornavn, etternavn) som skal være skrivebeskyttet, er det bedre å bruke tupler for hver oppføring i stedet for lister. I tillegg, som nevnt ovenfor, er tupler litt mer minneeffektive sammenlignet med lister.

1. Hvilket av følgende scenarier egner seg best for bruk av et sett i stedet for en liste?

2. Du har et datasett med millioner av oppføringer og må ofte sjekke om bestemte verdier finnes i det. Hvilken datastruktur er mest effektiv for dette formålet?

3. Du oppretter en post for hver student som inkluderer en unik ID, fornavn og etternavn. Dataene skal ikke endres etter opprettelse. Hvilken datastruktur er mest hensiktsmessig?

question mark

Hvilket av følgende scenarier egner seg best for bruk av et sett i stedet for en liste?

Select the correct answer

question mark

Du har et datasett med millioner av oppføringer og må ofte sjekke om bestemte verdier finnes i det. Hvilken datastruktur er mest effektiv for dette formålet?

Select the correct answer

question mark

Du oppretter en post for hver student som inkluderer en unik ID, fornavn og etternavn. Dataene skal ikke endres etter opprettelse. Hvilken datastruktur er mest hensiktsmessig?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2
some-alt