Mengder 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}')
La oss nå sammenligne ytelsen til et sett med en liste ved medlemskapstesting:
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
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'
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?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
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
Mengder 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}')
La oss nå sammenligne ytelsen til et sett med en liste ved medlemskapstesting:
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
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'
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?
Takk for tilbakemeldingene dine!