Sæt og Tupler
Før vi fortsætter med sets og tuples, er det vigtigt at nævne, at vi ikke vil diskutere dictionaries her.
Set
Et set tilbyder en gennemsnitlig O(1) tidskompleksitet for indsættelser, sletninger og opslag, hvilket betyder, at disse operationer udføres i konstant tid, uanset størrelsen på settet. Dette gør sets meget hurtigere end lister til medlemskabstest og operationer som tilføjelse eller fjernelse af elementer, hvor lister kræver O(n) tidskompleksitet (tiden vokser lineært med størrelsen af listen) i værste fald.
Hvornår skal det bruges:
- Der er behov for unikke elementer, hvilket sikrer, at der ikke er dubletter i samlingen;
- Hurtig medlemskabstest er påkrævet, hvilket gør sets ideelle til opgaver som at kontrollere eksistensen af et element;
- Der udføres operationer såsom set-unioner, snit eller differenser, som sets understøtter med optimerede metoder;
- Rækkefølge er uden betydning, da sets er iboende uordnede, og der er ikke behov for at opretholde indsættelsesrækkefølgen.
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}')
Lad os nu sammenligne ydeevnen af et set med en liste ved medlemskabstest:
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 anvendes typisk, når det er nødvendigt at sikre, at data ikke kan ændres, eller som nøgle i en dict eller element i et set (fordi tupler er hashbare).
-
Bedre end lister: når der er behov for uændrede data, ønskes brug af samlingen som en ordbogs-nøgle eller sætelement, eller når der kræves hukommelseseffektiv lagring af en samling med fast størrelse;
-
Bedre end NumPy-arrays: når dataene er ikke-numeriske eller hvor uændrethed er afgørende. Mens NumPy-arrays er designet til numeriske beregninger og som standard kan ændres, giver tupler sikkerhed for ikke-numeriske data eller små, strukturerede samlinger, der skal forblive 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'
Da students-listen indeholder studenteroptegnelser (ID, fornavn, efternavn), som skal være skrivebeskyttede, er det bedre at bruge tupler til hver optegnelse i stedet for lister. Derudover er tupler, som nævnt ovenfor, en smule mere hukommelseseffektive sammenlignet med lister.
1. Hvilket af følgende scenarier egner sig bedst til at bruge et set i stedet for en liste?
2. Du har et datasæt med millioner af optegnelser og skal ofte kontrollere, om bestemte værdier findes i det. Hvilken datastruktur er mest effektiv til dette formål?
3. Du opretter en post for hver studerende, der inkluderer et unikt ID, fornavn og efternavn. Dataene må ikke ændres, når de først er oprettet. Hvilken datastruktur vil være mest passende?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 7.69
Sæt og Tupler
Stryg for at vise menuen
Før vi fortsætter med sets og tuples, er det vigtigt at nævne, at vi ikke vil diskutere dictionaries her.
Set
Et set tilbyder en gennemsnitlig O(1) tidskompleksitet for indsættelser, sletninger og opslag, hvilket betyder, at disse operationer udføres i konstant tid, uanset størrelsen på settet. Dette gør sets meget hurtigere end lister til medlemskabstest og operationer som tilføjelse eller fjernelse af elementer, hvor lister kræver O(n) tidskompleksitet (tiden vokser lineært med størrelsen af listen) i værste fald.
Hvornår skal det bruges:
- Der er behov for unikke elementer, hvilket sikrer, at der ikke er dubletter i samlingen;
- Hurtig medlemskabstest er påkrævet, hvilket gør sets ideelle til opgaver som at kontrollere eksistensen af et element;
- Der udføres operationer såsom set-unioner, snit eller differenser, som sets understøtter med optimerede metoder;
- Rækkefølge er uden betydning, da sets er iboende uordnede, og der er ikke behov for at opretholde indsættelsesrækkefølgen.
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}')
Lad os nu sammenligne ydeevnen af et set med en liste ved medlemskabstest:
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 anvendes typisk, når det er nødvendigt at sikre, at data ikke kan ændres, eller som nøgle i en dict eller element i et set (fordi tupler er hashbare).
-
Bedre end lister: når der er behov for uændrede data, ønskes brug af samlingen som en ordbogs-nøgle eller sætelement, eller når der kræves hukommelseseffektiv lagring af en samling med fast størrelse;
-
Bedre end NumPy-arrays: når dataene er ikke-numeriske eller hvor uændrethed er afgørende. Mens NumPy-arrays er designet til numeriske beregninger og som standard kan ændres, giver tupler sikkerhed for ikke-numeriske data eller små, strukturerede samlinger, der skal forblive 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'
Da students-listen indeholder studenteroptegnelser (ID, fornavn, efternavn), som skal være skrivebeskyttede, er det bedre at bruge tupler til hver optegnelse i stedet for lister. Derudover er tupler, som nævnt ovenfor, en smule mere hukommelseseffektive sammenlignet med lister.
1. Hvilket af følgende scenarier egner sig bedst til at bruge et set i stedet for en liste?
2. Du har et datasæt med millioner af optegnelser og skal ofte kontrollere, om bestemte værdier findes i det. Hvilken datastruktur er mest effektiv til dette formål?
3. Du opretter en post for hver studerende, der inkluderer et unikt ID, fornavn og efternavn. Dataene må ikke ændres, når de først er oprettet. Hvilken datastruktur vil være mest passende?
Tak for dine kommentarer!