Direkt zum Inhalt

Python Mengen und Mengenlehre Tutorial

Lerne etwas über Python-Sets: was sie sind, wie man sie erstellt, wann man sie benutzt, eingebaute Funktionen und ihre Beziehung zu den Operationen der Mengenlehre.
Aktualisierte 11. Sept. 2024  · 13 Min. Lesezeit

Python Sets vs. Listen und Tupel

Listen und Tupel sind Standard-Python-Datentypen, die Werte in einer Reihenfolge speichern. Sets sind ein weiterer Standard-Python-Datentyp, der ebenfalls Werte speichert. Der Hauptunterschied besteht darin, dass Sets im Gegensatz zu Listen oder Tupeln nicht mehrere Vorkommen desselben Elements haben können und ungeordnete Werte speichern.

Vorteile eines Python-Sets

Da Sets nicht mehrmals dasselbe Element enthalten können, sind sie sehr nützlich, um doppelte Werte aus einer Liste oder einem Tupel zu entfernen und gängige mathematische Operationen wie Vereinigungen und Überschneidungen durchzuführen.

Wenn du deine Python-Kenntnisse verbessern möchtest oder gerade erst anfängst, solltest du einen Blick auf unsere Python-Programmierer-Karriere auf DataCamp werfen.

Dann wollen wir mal loslegen.

Wie man ein Set in Python erstellt

Mengen sind eine veränderbare Sammlung von eindeutigen (einzigartigen) unveränderlichen Werten, die nicht geordnet sind.

Du kannst eine leere Menge initialisieren, indem du set() verwendest.

emptySet = set()

Um ein Set mit Werten zu initialisieren, kannst du eine Liste an set() übergeben.

dataScientist = set(['Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'])
dataEngineer = set(['Python', 'Java', 'Scala', 'Git', 'SQL', 'Hadoop'])

Führe den Code aus diesem Tutorial online aus und bearbeite ihn

Code ausführen

Python kostenlos lernen

Data Types in Python

BeginnerSkill Level
4 hr
69.5K learners
Consolidate and extend your knowledge of Python data types such as lists, dictionaries, and tuples, leveraging them to solve Data Science problems.
See DetailsRight Arrow

Ein Set initialisieren

Wenn du dir die Ausgabe der Variablen dataScientist und dataEngineer oben ansiehst, bemerkst du, dass die Werte in der Menge nicht in der Reihenfolge sind, in der sie hinzugefügt wurden. Das liegt daran, dass Mengen nicht geordnet sind.

Sets, die Werte enthalten, können auch durch geschweifte Klammern initialisiert werden.

dataScientist = {'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'}
dataEngineer = {'Python', 'Java', 'Scala', 'Git', 'SQL', 'Hadoop'}

Ein Set initialisieren

Beachte, dass geschweifte Klammern nur verwendet werden können, um eine Menge mit Werten zu initialisieren. Das Bild unten zeigt, dass die Verwendung von geschweiften Klammern ohne Werte eine der Möglichkeiten ist, ein Wörterbuch und nicht ein Set zu initialisieren.

Ein Set initialisieren

Hinzufügen und Entfernen von Werten aus Python-Sets

Um Werte zu einem Set hinzuzufügen oder zu entfernen, musst du zunächst ein Set initialisieren.

# Initialize set with values
graphicDesigner = {'InDesign', 'Photoshop', 'Acrobat', 'Premiere', 'Bridge'}

Werte zu einem Python-Set hinzufügen

Du kannst die Methode add verwenden, um einen Wert zu einer Menge hinzuzufügen.

graphicDesigner.add('Illustrator')

Werte zu einem Set hinzufügen

Es ist wichtig zu wissen, dass du nur unveränderliche Werte (wie Strings oder Tupel) zu einer Menge hinzufügen kannst. Du würdest zum Beispiel einen TypeError erhalten, wenn du versuchst, eine Liste zu einem Set hinzuzufügen.

graphicDesigner.add(['Powerpoint', 'Blender'])

Werte zu einem Set hinzufügen

Werte aus Mengen in Python entfernen

Es gibt mehrere Möglichkeiten, einen Wert aus einem Set zu entfernen.

Option 1: Du kannst die Methode remove verwenden, um einen Wert aus einer Menge zu entfernen.

graphicDesigner.remove('Illustrator')

Werte aus einer Menge entfernen

Der Nachteil dieser Methode ist, dass du einen KeyError bekommst, wenn du versuchst, einen Wert zu entfernen, der nicht in deinem Set ist.

Werte aus einer Menge entfernen

Option 2: Du kannst die Methode discard verwenden, um einen Wert aus einer Menge zu entfernen.

graphicDesigner.discard('Premiere')

Werte aus einer Menge entfernen

Der Vorteil dieses Ansatzes gegenüber der Methode remove ist, dass du keinen KeyError bekommst, wenn du versuchst, einen Wert zu entfernen, der nicht Teil der Menge ist. Wenn du dich mit Wörterbüchern auskennst, wirst du feststellen, dass dies ähnlich funktioniert wie die Wörterbuchmethode get.

Option 3: Du kannst auch die Methode pop verwenden, um einen beliebigen Wert aus einer Menge zu entfernen und zurückzugeben.

graphicDesigner.pop()

Werte aus einer Menge entfernen

Es ist wichtig zu beachten, dass die Methode einen KeyError auslöst, wenn die Menge leer ist.

Alle Werte aus einer Python-Menge entfernen

Du kannst die Methode clear verwenden, um alle Werte aus einer Menge zu entfernen.

graphicDesigner.clear()

Alle Werte aus einer Menge entfernen

Python-Set-Werte aktualisieren

Die Aktualisierungsmethode fügt die Elemente aus einer Menge zu einer Menge hinzu. Sie benötigt ein einzelnes Argument, das eine Menge, eine Liste, ein Tupel oder ein Wörterbuch sein kann. Die Methode .update() wandelt andere Datentypen automatisch in Sets um und fügt sie dem Set hinzu. 

Im Beispiel haben wir drei Sets initialisiert und eine Aktualisierungsfunktion verwendet, um Elemente aus Set2 zu Set1 und dann aus Set3 zu Set1 hinzuzufügen. 

# Initialize 3 sets
set1 = set([7, 10, 11, 13])
set2 = set([11, 8, 9, 12, 14, 15])
set3 = {'d', 'f', 'h'}

# Update set1 with set2
set1.update(set2)
print(set1)

# Update set1 with set3
set1.update(set3)
print(set1)

Python Set Update

Iterieren durch ein Python-Set

Wie viele Standard-Python-Datentypen ist es möglich, durch eine Menge zu iterieren.

# Initialize a set
dataScientist = {'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'}

for skill in dataScientist:
    print(skill)

Iterieren durch eine Menge

Wenn du dir die Ausgabe der einzelnen Werte in dataScientist ansiehst, bemerkst du, dass die Werte in der Menge nicht in der Reihenfolge gedruckt werden, in der sie hinzugefügt wurden. Das liegt daran, dass Mengen nicht geordnet sind.

Eine Python-Menge in geordnete Werte umwandeln

In diesem Lernprogramm wurde betont, dass Mengen ungeordnet sind. Wenn du die Werte aus deiner Menge in geordneter Form brauchst, kannst du die Funktion sorted verwenden, die eine geordnete Liste ausgibt.

type(sorted(dataScientist))

Menge in geordnete Werte umwandeln

Der folgende Code gibt die Werte in der Menge dataScientist in absteigender alphabetischer Reihenfolge aus (in diesem Fall Z-A).

sorted(dataScientist, reverse = True)

Menge in geordnete Werte umwandeln

Duplikate aus einer Liste in Python entfernen

Ein Teil des Inhalts dieses Abschnitts wurde bereits im Tutorial 18 Most Common Python List Questions behandelt, aber es ist wichtig zu betonen, dass Sets die schnellste Methode sind, um Duplikate aus einer Liste zu entfernen. Um dies zu zeigen, wollen wir den Leistungsunterschied zwischen zwei Ansätzen untersuchen.

Ansatz 1: Verwende ein Set, um Duplikate aus einer Liste zu entfernen.

print(list(set([1, 2, 3, 1, 7])))

Ansatz 2: Verwende ein Listenverständnis, um Duplikate aus einer Liste zu entfernen (Wenn du eine Auffrischung über Listenverständnisse brauchst , schau dir dieses Tutorial an).

def remove_duplicates(original):
    unique = []
    [unique.append(n) for n in original if n not in unique]
    return(unique)

print(remove_duplicates([1, 2, 3, 1, 7]))

Der Leistungsunterschied kann mit der Bibliothek timeit gemessen werden, mit der du deinen Python-Code zeitlich steuern kannst. Der folgende Code führt den Code für jeden Ansatz 10000 Mal aus und gibt die Gesamtzeit in Sekunden aus.

import timeit

# Approach 1: Execution time
print(timeit.timeit('list(set([1, 2, 3, 1, 7]))', number=10000))

# Approach 2: Execution time
print(timeit.timeit('remove_duplicates([1, 2, 3, 1, 7])', globals=globals(), number=10000))

Duplikate aus einer Liste entfernen

Der Vergleich dieser beiden Ansätze zeigt, dass die Verwendung von Sets zum Entfernen von Duplikaten effizienter ist. Auch wenn es nach einem kleinen Zeitunterschied aussieht, kannst du damit viel Zeit sparen, wenn du sehr große Listen hast.

Python Mengenoperationen

Eine häufige Verwendung von Mengen in Python ist die Berechnung von mathematischen Standardoperationen wie Vereinigung, Schnittmenge, Differenz und symmetrische Differenz. Die folgende Abbildung zeigt ein paar mathematische Standardoperationen für zwei Mengen A und B. Der rote Teil jedes Venn-Diagramms ist die Ergebnismenge einer bestimmten Mengenoperation.

Operationsmethoden festlegen

Python-Sets verfügen über Methoden, mit denen du diese mathematischen Operationen durchführen kannst, sowie über Operatoren, die dir gleichwertige Ergebnisse liefern.

Bevor wir diese Methoden erkunden, beginnen wir mit der Initialisierung der beiden Sets dataScientist und dataEngineer.

dataScientist = set(['Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'])
dataEngineer = set(['Python', 'Java', 'Scala', 'Git', 'SQL', 'Hadoop'])

Gewerkschaft

Eine Vereinigung, bezeichnet als dataScientist ∪ dataEngineer, ist die Menge aller Werte, die Werte von dataScientist oder dataEngineer oder von beiden sind. Du kannst die Methode union verwenden, um alle eindeutigen Werte in zwei Mengen herauszufinden.

# set built-in function union
dataScientist.union(dataEngineer)

# Equivalent Result
dataScientist | dataEngineer

Die Menge, die sich aus der Vereinigung ergibt, kann als roter Teil des Venn-Diagramms unten visualisiert werden.

Operationsmethoden festlegen

Kreuzung

Eine Schnittmenge von zwei Mengen dataScientist und dataEngineer, bezeichnet als dataScientist ∩ dataEngineer, ist die Menge aller Werte, die sowohl Werte von dataScientist als auch von dataEngineer sind.

# Intersection operation
dataScientist.intersection(dataEngineer)

# Equivalent Result
dataScientist & dataEngineer

Kreuzung

Die Menge, die sich aus der Kreuzung ergibt, kann als roter Teil des Venn-Diagramms unten dargestellt werden.

Kreuzung

Es kann sein, dass du auf einen Fall stößt, in dem du sicherstellen willst, dass zwei Mengen keinen gemeinsamen Wert haben. Mit anderen Worten: Du willst zwei Mengen, deren Schnittpunkt leer ist. Diese beiden Mengen werden als disjunkte Mengen bezeichnet. Du kannst auf disjunkte Mengen testen, indem du die Methode isdisjoint verwendest.

# Initialize a set
graphicDesigner = {'Illustrator', 'InDesign', 'Photoshop'}

# These sets have elements in common so it would return False
dataScientist.isdisjoint(dataEngineer)

# These sets have no elements in common so it would return True
dataScientist.isdisjoint(graphicDesigner)

Kreuzung

Im Venn-Diagramm unten kannst du sehen, dass die disjunkten Mengen dataScientist und graphicDesigner keine gemeinsamen Werte haben.

Kreuzung

Unterschied

Eine Differenz zwischen zwei Mengen dataScientist und dataEngineer, bezeichnet als dataScientist \ dataEngineer, ist die Menge aller Werte von dataScientist, die nicht Werte von dataEngineer sind.

# Difference Operation
dataScientist.difference(dataEngineer)

# Equivalent Result
dataScientist - dataEngineer

Unterschied

Die Menge, die sich aus der Differenz ergibt, kann als roter Teil des Venn-Diagramms unten visualisiert werden.

Unterschied

Symmetrische Differenz

Eine symmetrische Differenz von zwei Mengen dataScientist und dataEngineer, bezeichnet als dataScientist △ dataEngineer, ist die Menge aller Werte, die genau zu einer der beiden Mengen gehören, aber nicht zu beiden.

# Symmetric Difference Operation
dataScientist.symmetric_difference(dataEngineer)

# Equivalent Result
dataScientist ^ dataEngineer

symmetric_difference

Die Menge, die durch die symmetrische Differenz zurückgegeben wird, kann als roter Teil des Venn-Diagramms unten visualisiert werden.

symmetric_difference

Verstehen setzen

Du hast vielleicht schon etwas über Listen-, Wörterbuch- und Generatorverstehensaufgaben gelernt. Es gibt auch Python Mengenverständnisse. Mengenverständnisse sind sehr ähnlich. Mengenkomplexe in Python können wie folgt aufgebaut sein:

{skill for skill in ['SQL', 'SQL', 'PYTHON', 'PYTHON']}

Verstehen setzen

Die obige Ausgabe ist eine Menge mit 2 Werten, denn Mengen können nicht mehrere Vorkommen desselben Elements haben.

Die Idee hinter der Verwendung von Set Comprehensions ist, dass du im Code genauso schreiben und argumentieren kannst, wie du Mathematik von Hand machen würdest.

{skill for skill in ['GIT', 'PYTHON', 'SQL'] if skill not in {'GIT', 'PYTHON', 'JAVA'}}
 

Der obige Code ähnelt einem Satzunterschied, den du bereits kennengelernt hast. Es sieht nur ein bisschen anders aus.

Mitgliedschaftstests

Zugehörigkeitstests prüfen, ob ein bestimmtes Element in einer Sequenz enthalten ist, z. B. in Strings, Listen, Tupeln oder Mengen. Einer der Hauptvorteile der Verwendung von Sets in Python ist, dass sie für Mitgliedschaftstests optimiert sind. Mit Sets lassen sich zum Beispiel Zugehörigkeitstests viel effizienter durchführen als mit Listen. Falls du aus der Informatik kommst, liegt das daran, dass die durchschnittliche Zeitkomplexität von Zugehörigkeitstests in Mengen O(1) gegenüber O(n) für Listen ist.

Der folgende Code zeigt einen Mitgliedschaftstest mit einer Liste.

# Initialize a list
possibleList = ['Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS', 'Java', 'Spark', 'Scala']

# Membership test
'Python' in possibleList

Mitgliedschaftstests

Etwas Ähnliches kann für Sets gemacht werden. Sets sind einfach effizienter.

# Initialize a set
possibleSet = {'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS', 'Java', 'Spark', 'Scala'}

# Membership test
'Python' in possibleSet

Mitgliedschaftstests

Da possibleSet eine Menge ist und der Wert 'Python' ein Wert von possibleSet ist, kann dies als 'Python'possibleSet bezeichnet werden.

Wenn du einen Wert hättest, der nicht Teil der Menge ist, wie 'Fortran', würde er als 'Fortran'possibleSet bezeichnet werden.

Untermenge

Eine praktische Anwendung des Verständnisses von Zugehörigkeit sind Teilmengen.

Lass uns zunächst zwei Sets initialisieren.

possibleSkills = {'Python', 'R', 'SQL', 'Git', 'Tableau', 'SAS'}
mySkills = {'Python', 'R'}
 

Wenn jeder Wert der Menge mySkills auch ein Wert der Menge possibleSkills ist, dann sagt man, dass mySkills eine Teilmenge von possibleSkills ist, mathematisch geschrieben mySkillspossibleSkills.

Du kannst mit der Methode issubset prüfen, ob eine Menge eine Teilmenge einer anderen ist.

mySkills.issubset(possibleSkills)

Untermenge

Da die Methode in diesem Fall True zurückgibt, handelt es sich um eine Teilmenge. In dem folgenden Venn-Diagramm siehst du, dass jeder Wert der Menge mySkills auch ein Wert der Menge possibleSkills ist.

Untermenge

Frozensets

Du hast bereits verschachtelte Listen und Tupel kennengelernt.

# Nested Lists and Tuples
nestedLists = [['the', 12], ['to', 11], ['of', 9], ['and', 7], ['that', 6]]
nestedTuples = (('the', 12), ('to', 11), ('of', 9), ('and', 7), ('that', 6))

Frozensets

Das Problem mit verschachtelten Sets ist, dass du normalerweise keine verschachtelten Python-Sets haben kannst, da Sets keine veränderbaren Werte enthalten können, auch keine Sets.

Frozensets

Das ist eine Situation, in der du ein Frozenset verwenden solltest. Ein Frozenset ist einem Set sehr ähnlich, mit dem Unterschied, dass ein Frozenset unveränderlich ist.

Du machst ein Frozenset, indem du frozenset() benutzt.

# Initialize a frozenset
immutableSet = frozenset()

Frozensets

Du kannst ein verschachteltes Set erstellen, wenn du ein Frozenset ähnlich dem unten stehenden Code verwendest.

nestedSets = set([frozenset()])

Frozensets

Ein großer Nachteil von Frozensets ist, dass sie unveränderlich sind, das heißt, du kannst keine Werte hinzufügen oder entfernen.

Fazit

Die Python-Sets sind sehr nützlich, um doppelte Werte effizient aus einer Sammlung wie einer Liste zu entfernen und um gängige mathematische Operationen wie Vereinigungen und Schnittmengen durchzuführen. Eine der Herausforderungen, auf die Menschen oft stoßen, ist die Frage, wann sie die verschiedenen Datentypen verwenden sollen. Wenn du dir zum Beispiel nicht sicher bist, wann es von Vorteil ist, ein Wörterbuch und wann ein Set zu verwenden, empfehle ich dir, den täglichen Übungsmodus von DataCamp auszuprobieren. Wenn du Fragen oder Gedanken zum Tutorial hast, melde dich unten in den Kommentaren oder auf Twitter.

Themen

Python-Kurse

Kurs

Introduction to Python

4 hr
5.9M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Siehe DetailsRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

See MoreSee More