Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Mängder och Tupler | Effektiv Användning av Datastrukturer
Optimeringstekniker i Python

bookMängder och Tupler

Innan vi går vidare med mängder och tupler är det viktigt att nämna att vi inte kommer att diskutera dictionaries här.

Mängd

En mängd erbjuder en genomsnittlig O(1) tidskomplexitet för insättningar, borttagningar och uppslagningar, vilket innebär att dessa operationer utförs i konstant tid oavsett mängdens storlek. Detta gör mängder mycket snabbare än listor för medlemskapstestning och operationer som att lägga till eller ta bort element, där listor kräver O(n) tidskomplexitet (tiden ökar linjärt med listans storlek) i värsta fall.

När det är lämpligt att använda:

  • Behov av unika element, vilket säkerställer att det inte finns några dubbletter i samlingen;
  • Snabb medlemskapstestning krävs, vilket gör mängder idealiska för uppgifter som att kontrollera om ett objekt finns;
  • Utförande av operationer såsom unioner, snitt eller differenser, vilka mängder stöder med optimerade metoder;
  • Ordning saknar betydelse, eftersom mängder är inneboende oordnade och det inte finns behov av att bevara insättningsordning.
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

Låt oss nu jämföra prestandan för en mängd och en lista vid medlemskapstestning:

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 används vanligtvis när du behöver säkerställa att data inte kan ändras eller som en nyckel i en dict eller ett element i en set (eftersom tupler är hashbara).

  • Bättre än listor: när du behöver oföränderliga data, vill använda samlingen som en dictionary-nyckel eller set-element, eller när du behöver minnes­effektiv lagring för en samling med fast storlek;

  • Bättre än NumPy-arrayer: när din data är icke-numerisk eller när oföränderlighet är avgörande. Medan NumPy-arrayer är utformade för numeriska beräkningar och är föränderliga som standard, ger tupler säkerhet för icke-numerisk data eller små, strukturerade samlingar som måste förbli oförändrade.

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

Eftersom listan students innehåller studentposter (ID, förnamn, efternamn) som behöver vara skrivskyddade, är det bättre att använda tupler för varje post istället för listor. Dessutom, som nämnts ovan, är tupler något mer minnes­effektiva jämfört med listor.

1. Vilket av följande scenarier lämpar sig bäst för att använda en mängd istället för en lista?

2. Du har en datamängd med miljontals poster och behöver ofta kontrollera om specifika värden finns i den. Vilken datastruktur är mest effektiv för detta ändamål?

3. Du skapar en post för varje student som inkluderar ett unikt ID, förnamn och efternamn. Uppgifterna ska inte ändras efter att de har skapats. Vilken datastruktur är mest lämplig?

question mark

Vilket av följande scenarier lämpar sig bäst för att använda en mängd istället för en lista?

Select the correct answer

question mark

Du har en datamängd med miljontals poster och behöver ofta kontrollera om specifika värden finns i den. Vilken datastruktur är mest effektiv för detta ändamål?

Select the correct answer

question mark

Du skapar en post för varje student som inkluderar ett unikt ID, förnamn och efternamn. Uppgifterna ska inte ändras efter att de har skapats. Vilken datastruktur är mest lämplig?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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

bookMängder och Tupler

Svep för att visa menyn

Innan vi går vidare med mängder och tupler är det viktigt att nämna att vi inte kommer att diskutera dictionaries här.

Mängd

En mängd erbjuder en genomsnittlig O(1) tidskomplexitet för insättningar, borttagningar och uppslagningar, vilket innebär att dessa operationer utförs i konstant tid oavsett mängdens storlek. Detta gör mängder mycket snabbare än listor för medlemskapstestning och operationer som att lägga till eller ta bort element, där listor kräver O(n) tidskomplexitet (tiden ökar linjärt med listans storlek) i värsta fall.

När det är lämpligt att använda:

  • Behov av unika element, vilket säkerställer att det inte finns några dubbletter i samlingen;
  • Snabb medlemskapstestning krävs, vilket gör mängder idealiska för uppgifter som att kontrollera om ett objekt finns;
  • Utförande av operationer såsom unioner, snitt eller differenser, vilka mängder stöder med optimerade metoder;
  • Ordning saknar betydelse, eftersom mängder är inneboende oordnade och det inte finns behov av att bevara insättningsordning.
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

Låt oss nu jämföra prestandan för en mängd och en lista vid medlemskapstestning:

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 används vanligtvis när du behöver säkerställa att data inte kan ändras eller som en nyckel i en dict eller ett element i en set (eftersom tupler är hashbara).

  • Bättre än listor: när du behöver oföränderliga data, vill använda samlingen som en dictionary-nyckel eller set-element, eller när du behöver minnes­effektiv lagring för en samling med fast storlek;

  • Bättre än NumPy-arrayer: när din data är icke-numerisk eller när oföränderlighet är avgörande. Medan NumPy-arrayer är utformade för numeriska beräkningar och är föränderliga som standard, ger tupler säkerhet för icke-numerisk data eller små, strukturerade samlingar som måste förbli oförändrade.

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

Eftersom listan students innehåller studentposter (ID, förnamn, efternamn) som behöver vara skrivskyddade, är det bättre att använda tupler för varje post istället för listor. Dessutom, som nämnts ovan, är tupler något mer minnes­effektiva jämfört med listor.

1. Vilket av följande scenarier lämpar sig bäst för att använda en mängd istället för en lista?

2. Du har en datamängd med miljontals poster och behöver ofta kontrollera om specifika värden finns i den. Vilken datastruktur är mest effektiv för detta ändamål?

3. Du skapar en post för varje student som inkluderar ett unikt ID, förnamn och efternamn. Uppgifterna ska inte ändras efter att de har skapats. Vilken datastruktur är mest lämplig?

question mark

Vilket av följande scenarier lämpar sig bäst för att använda en mängd istället för en lista?

Select the correct answer

question mark

Du har en datamängd med miljontals poster och behöver ofta kontrollera om specifika värden finns i den. Vilken datastruktur är mest effektiv för detta ändamål?

Select the correct answer

question mark

Du skapar en post för varje student som inkluderar ett unikt ID, förnamn och efternamn. Uppgifterna ska inte ändras efter att de har skapats. Vilken datastruktur är mest lämplig?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 2
some-alt