Mengen und Tupel
Bevor wir uns mit Sets und Tupeln beschäftigen, ist es wichtig zu erwähnen, dass Dictionaries hier nicht behandelt werden.
Set
Ein Set bietet eine durchschnittliche O(1)-Zeitkomplexität für Einfügungen, Löschungen und Suchvorgänge. Das bedeutet, dass diese Operationen in konstanter Zeit ausgeführt werden, unabhängig von der Größe des Sets. Dadurch sind Sets wesentlich schneller als Listen beim Überprüfen der Mitgliedschaft sowie beim Hinzufügen oder Entfernen von Elementen, wo Listen im schlechtesten Fall eine O(n)-Zeitkomplexität aufweisen (die Zeit wächst linear mit der Größe der Liste).
Wann verwenden:
- Es werden eindeutige Elemente benötigt, um Duplikate in der Sammlung zu vermeiden;
- Schnelle Mitgliedschaftsüberprüfung ist erforderlich, wodurch Sets ideal für Aufgaben wie das Überprüfen der Existenz eines Elements sind;
- Es werden Operationen wie Vereinigungen, Schnittmengen oder Differenzen durchgeführt, die von Sets mit optimierten Methoden unterstützt werden;
- Reihenfolge ist unerheblich, da Sets von Natur aus ungeordnet sind und keine Einfügereihenfolge beibehalten wird.
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}')
Vergleich der Performance von Set und Liste beim Überprüfen der Mitgliedschaft:
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))
Tupel
Tupel werden typischerweise verwendet, wenn sichergestellt werden muss, dass die Daten nicht verändert werden können, oder als Schlüssel in einem dict oder als Element in einem set (da Tupel hashbar sind).
-
Besser als Listen: wenn unveränderliche Daten benötigt werden, die Sammlung als Dictionary-Schlüssel oder Set-Element verwendet werden soll oder wenn eine speichereffiziente Speicherung für eine Sammlung fester Größe erforderlich ist;
-
Besser als NumPy-Arrays: wenn die Daten nicht numerisch sind oder wenn Unveränderlichkeit entscheidend ist. Während NumPy-Arrays für numerische Berechnungen konzipiert und standardmäßig veränderbar sind, bieten Tupel Sicherheit für nicht-numerische Daten oder kleine, strukturierte Sammlungen, die konstant bleiben müssen.
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 die students-Liste Studierendendatensätze (ID, Vorname, Nachname) enthält, die schreibgeschützt sein sollen, ist es besser, für jeden Datensatz Tupel anstelle von Listen zu verwenden. Zusätzlich sind Tupel, wie oben erwähnt, etwas speichereffizienter als Listen.
1. Welches der folgenden Szenarien eignet sich am besten für die Verwendung einer Menge anstelle einer Liste?
2. Sie haben einen Datensatz mit Millionen von Einträgen und müssen häufig überprüfen, ob bestimmte Werte darin enthalten sind. Welche Datenstruktur ist für diesen Zweck am effizientesten?
3. Sie erstellen einen Datensatz für jeden Studenten, der eine eindeutige ID, einen Vornamen und einen Nachnamen enthält. Die Daten sollen nach der Erstellung nicht mehr verändert werden. Welche Datenstruktur ist am besten geeignet?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Großartig!
Completion Rate verbessert auf 7.69
Mengen und Tupel
Swipe um das Menü anzuzeigen
Bevor wir uns mit Sets und Tupeln beschäftigen, ist es wichtig zu erwähnen, dass Dictionaries hier nicht behandelt werden.
Set
Ein Set bietet eine durchschnittliche O(1)-Zeitkomplexität für Einfügungen, Löschungen und Suchvorgänge. Das bedeutet, dass diese Operationen in konstanter Zeit ausgeführt werden, unabhängig von der Größe des Sets. Dadurch sind Sets wesentlich schneller als Listen beim Überprüfen der Mitgliedschaft sowie beim Hinzufügen oder Entfernen von Elementen, wo Listen im schlechtesten Fall eine O(n)-Zeitkomplexität aufweisen (die Zeit wächst linear mit der Größe der Liste).
Wann verwenden:
- Es werden eindeutige Elemente benötigt, um Duplikate in der Sammlung zu vermeiden;
- Schnelle Mitgliedschaftsüberprüfung ist erforderlich, wodurch Sets ideal für Aufgaben wie das Überprüfen der Existenz eines Elements sind;
- Es werden Operationen wie Vereinigungen, Schnittmengen oder Differenzen durchgeführt, die von Sets mit optimierten Methoden unterstützt werden;
- Reihenfolge ist unerheblich, da Sets von Natur aus ungeordnet sind und keine Einfügereihenfolge beibehalten wird.
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}')
Vergleich der Performance von Set und Liste beim Überprüfen der Mitgliedschaft:
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))
Tupel
Tupel werden typischerweise verwendet, wenn sichergestellt werden muss, dass die Daten nicht verändert werden können, oder als Schlüssel in einem dict oder als Element in einem set (da Tupel hashbar sind).
-
Besser als Listen: wenn unveränderliche Daten benötigt werden, die Sammlung als Dictionary-Schlüssel oder Set-Element verwendet werden soll oder wenn eine speichereffiziente Speicherung für eine Sammlung fester Größe erforderlich ist;
-
Besser als NumPy-Arrays: wenn die Daten nicht numerisch sind oder wenn Unveränderlichkeit entscheidend ist. Während NumPy-Arrays für numerische Berechnungen konzipiert und standardmäßig veränderbar sind, bieten Tupel Sicherheit für nicht-numerische Daten oder kleine, strukturierte Sammlungen, die konstant bleiben müssen.
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 die students-Liste Studierendendatensätze (ID, Vorname, Nachname) enthält, die schreibgeschützt sein sollen, ist es besser, für jeden Datensatz Tupel anstelle von Listen zu verwenden. Zusätzlich sind Tupel, wie oben erwähnt, etwas speichereffizienter als Listen.
1. Welches der folgenden Szenarien eignet sich am besten für die Verwendung einer Menge anstelle einer Liste?
2. Sie haben einen Datensatz mit Millionen von Einträgen und müssen häufig überprüfen, ob bestimmte Werte darin enthalten sind. Welche Datenstruktur ist für diesen Zweck am effizientesten?
3. Sie erstellen einen Datensatz für jeden Studenten, der eine eindeutige ID, einen Vornamen und einen Nachnamen enthält. Die Daten sollen nach der Erstellung nicht mehr verändert werden. Welche Datenstruktur ist am besten geeignet?
Danke für Ihr Feedback!