in in Python: Mitgliedschaftsoperator erklärt

Lernen Sie, wie Sie den in-Operator in Python für Mitgliedschaftstests in Listen, Tupeln, Zeichenfolgen, Mengen und Wörterbüchern mit Syntaxbeispielen, Leistungstipps und Best Practices verwenden.

Der in-Operator ist PythonsMitgliedschaftsoperator, der überprüft, ob ein Wert in einer Sammlung wie einer Liste, einem Tupel, einer Zeichenfolge, einer Menge oder einem Wörterbuch existiert. Er gibt True zurück, wenn der Wert gefunden wird, und False andernfalls. Dieser Operator macht Mitgliedschaftstests sauber und lesbar.

Was macht der in-Operator?

Der in-Operator führt einenMitgliedschaftstest durch: Er sucht nach einem bestimmten Wert innerhalb einer Sammlung und gibt ein boolesches Ergebnis zurück. Die grundlegende Syntax ist:

value in collection

Hier ist value das, wonach Sie suchen, und collection kann jedes iterierbare Objekt wie eine Liste, ein Tupel, eine Zeichenfolge, eine Menge oder ein Wörterbuch sein (für Wörterbücher prüft in standardmäßig Schlüssel).

in mit Listen und Tupeln verwenden

Listen und Tupel sind die häufigsten Anwendungsfälle für den in-Operator.

Beispiel 1: Mitgliedschaft in Listen prüfen

numbers = [1, 2, 3, 4, 5]

print(3 in numbers)      # Output: True
print(10 in numbers)     # Output: False
print(3 not in numbers)  # Output: False
Ausgabe:
True
False
False

Beispiel 2: Mitgliedschaft in Tupeln prüfen

coordinates = (10, 20, 30)

print(20 in coordinates)      # Output: True
print(50 in coordinates)      # Output: False
print(50 not in coordinates)  # Output: True
Ausgabe:
True
False
True

Für Listen und Tupel verwendet Python einenlinearen Suchalgorithmus, was bedeutet, dass jedes Element einzeln überprüft wird, bis eine Übereinstimmung gefunden wird oder das Ende erreicht wird. Die Zeitkomplexität ist O(n), daher dauert die Suche in größeren Sammlungen länger.

in mit Zeichenfolgen verwenden

Wenn in mit Zeichenfolgen verwendet wird, prüft es dieTeilzeichenfolgen-Mitgliedschaft.

Beispiel 1: Grundlegende Teilzeichenfolgenprüfung

text = "Hello, World!"

print("World" in text)      # Output: True
print("Python" in text)     # Output: False
print("hello" in text)      # Output: False (case-sensitive)
Ausgabe:
True
False
False

Beispiel 2: Groß-/Kleinschreibung-unabhängige Prüfung

text = "Hello, World!"
search = "world"

print(search.lower() in text.lower())  # Output: True
Ausgabe:
True

Mitgliedschaftstests für Zeichenfolgen sind groß-/kleinschreibungsabhängig. Wenn Sie groß-/kleinschreibungsunabhängige Prüfungen benötigen, konvertieren Sie beide Zeichenfolgen in denselben Fall. Teilzeichenfolgensuchen in Python-Zeichenfolgen haben im schlimmsten Fall auch eine Komplexität von O(n).

in mit Mengen verwenden

Mengen sind für Mitgliedschaftstests optimiert. Da Mengen internHash-Tabellen verwenden, hat der in-Operator eine durchschnittliche Zeitkomplexität von O(1).

Beispiel 1: Schneller Mitgliedschaftstest

allowed_users = {"alice", "bob", "charlie"}

print("alice" in allowed_users)    # Output: True
print("dave" in allowed_users)     # Output: False
Ausgabe:
True
False

Beispiel 2: Leistungsoptimierung

# Slow for large lists
users = ["alice", "bob", "charlie"]
if "alice" in users:
    print("Found")

# Fast - convert to set first
users_set = set(users)
if "alice" in users_set:
    print("Found")
Ausgabe:
Found
Found

Wenn Sie viele Mitgliedschaftstests durchführen müssen, kann die Umwandlung einer Liste in eine Menge die Leistung erheblich verbessern.

in mit Wörterbüchern verwenden

Wenn Sie in mit einem Wörterbuch verwenden, prüft es, ob ein Schlüssel existiert (nicht Werte).

Beispiel 1: Schlüssel prüfen

user_ages = {"alice": 30, "bob": 25, "charlie": 35}

print("alice" in user_ages)      # Output: True
print("dave" in user_ages)       # Output: False
print(30 in user_ages)           # Output: False (30 is a value, not a key)
Ausgabe:
True
False
False

Beispiel 2: Werte prüfen

user_ages = {"alice": 30, "bob": 25, "charlie": 35}

# Check if a value exists
print(30 in user_ages.values())  # Output: True
Ausgabe:
True

Beispiel 3: Schlüssel-Wert-Paare prüfen

user_ages = {"alice": 30, "bob": 25, "charlie": 35}

# Check if a key-value pair exists
print(("alice", 30) in user_ages.items())  # Output: True
Ausgabe:
True

Mitgliedschaftstests für Wörterbuchschlüssel sind im Durchschnitt auch O(1), da Wörterbücher Hash-Tabellen verwenden.

Der not in-Operator

Python bietet auch den not in-Operator, der True zurückgibt, wenn der Wertnicht gefunden wird.

Beispiel: not in verwenden

numbers = [1, 2, 3, 4, 5]

print(10 not in numbers)  # Output: True
print(3 not in numbers)   # Output: False
Ausgabe:
True
False

Dies ist einfach die logische Negation von in und funktioniert mit allen denselben Datentypen.

in mit benutzerdefinierten Objekten verwenden

Wenn Sie Ihre eigenen Klassen erstellen, können Sie sie mit dem in-Operator arbeiten lassen, indem Sie die Methode __contains__() implementieren.

Beispiel: Benutzerdefinierte Sammlungsklasse

class MyCollection:
    def __init__(self, items):
        self.items = items
    
    def __contains__(self, item):
        return item in self.items

my_list = MyCollection([1, 2, 3, 4, 5])

print(3 in my_list)   # Output: True
print(10 in my_list)  # Output: False
Ausgabe:
True
False

Wenn Ihre Klasse __contains__() nicht definiert, aber iterierbar ist (implementiert __iter__()), wird Python auf die Iteration durch die Sammlung zurückgreifen, um die Mitgliedschaft zu prüfen.

Leistungsüberlegungen

Die Leistung des in-Operators hängt vom Datentyp ab.

Datentyp Zeitkomplexität Hinweise
List O(n) Linear search
Tuple O(n) Linear search
String O(n) Substring search
Set O(1) average Hash-based lookup
Dictionary O(1) average Hash-based lookup (keys only)

Für häufige Mitgliedschaftstests in großen Sammlungen bevorzugen Sie Mengen oder Wörterbücher gegenüber Listen oder Tupeln.

Häufige Anwendungsfälle

Anwendungsfall 1: Benutzerberechtigungen prüfen

admin_users = {"alice", "bob"}

if current_user in admin_users:
    print("Access granted")
else:
    print("Access denied")
Ausgabe:
Access granted

Anwendungsfall 2: Eingabe validieren

valid_options = ["yes", "no", "maybe"]

user_input = input("Enter your choice: ")

if user_input in valid_options:
    print("Valid choice")
else:
    print("Invalid choice")
Ausgabe:
Valid choice

Anwendungsfall 3: Daten filtern

exclude_words = {"the", "is", "at", "which", "on"}

words = ["the", "quick", "brown", "fox"]
filtered = [word for word in words if word not in exclude_words]

print(filtered)  # Output: ['quick', 'brown', 'fox']
Ausgabe:
['quick', 'brown', 'fox']

Häufige Fehler und Best Practices

Fehler 1: in für Bereichsprüfungen verwenden

# Not recommended for performance-critical code
if 5 in range(1, 10):
    print("In range")

# Better: Use comparison operators
if 1 <= 5 < 10:
    print("In range")

Verwenden Sie in nicht für numerische Bereichsprüfungen wie if 5 in range(1, 10): in leistungskritischem Code; verwenden Sie stattdessen Vergleichsoperatoren: if 1 <= 5 < 10:.

Praxis 1: Listen für häufige Prüfungen in Mengen umwandeln

# When checking membership in large lists repeatedly
large_list = [1, 2, 3, ...]  # Many items

# Convert to set for faster lookups
large_set = set(large_list)
if item in large_set:
    print("Found")

Wenn Sie die Mitgliedschaft in großen Listen wiederholt prüfen, wandeln Sie die Liste zuerst in eine Menge um, um viel schnellere Lookups zu erhalten.

Praxis 2: Wörterbuchverhalten beachten

user_data = {"name": "Alice", "age": 30}

# in checks keys, not values
print("name" in user_data)        # True
print("Alice" in user_data)        # False

# To check values, use .values()
print("Alice" in user_data.values())  # True

Denken Sie daran, dass in in Wörterbüchern dieSchlüssel prüft, nicht die Werte. Verwenden Sie .values() oder .items(), wenn Sie Werte oder Schlüssel-Wert-Paare prüfen müssen.

Praxis 3: Groß-/Kleinschreibung in Zeichenfolgen

text = "Hello, World!"

# Case-sensitive check
print("hello" in text)  # False

# Case-insensitive check
print("hello".lower() in text.lower())  # True

Mitgliedschaftstests für Zeichenfolgen mit in sind groß-/kleinschreibungsabhängig; normalisieren Sie den Fall bei Bedarf.

Probieren Sie es selbst

Üben Sie, was Sie gelernt haben, indem Sie den Code unten ändern. Versuchen Sie, die Werte und Bedingungen zu ändern, um verschiedene Ausgaben zu sehen!

Bereit
main.py
Ausgabekonsole 0 ms
// Klicken Sie auf "Code Ausführen", um Ergebnisse zu sehen

Verwandte Themen

Häufig gestellte Fragen

Was ist der Unterschied zwischen 'in' und '==' in Python?

Der in-Operator prüft, ob ein Wert in einer Sammlung existiert (Mitgliedschaftstest), während == prüft, ob zwei Werte gleich sind. Zum Beispiel gibt 3 in [1, 2, 3] True zurück (Mitgliedschaft), während [1, 2, 3] == [1, 2, 3] True zurückgibt (Gleichheit).

Prüft 'in' Schlüssel oder Werte in Wörterbüchern?

Der in-Operator prüft standardmäßig dieSchlüssel in Wörterbüchern. Um Werte zu prüfen, verwenden Sie value in dict.values(). Um Schlüssel-Wert-Paare zu prüfen, verwenden Sie (key, value) in dict.items().

Ist 'in' bei der Prüfung von Zeichenfolgen groß-/kleinschreibungsabhängig?

Ja, der in-Operator ist bei der Prüfung von Zeichenfolgen groß-/kleinschreibungsabhängig. "hello" in "Hello, World!" gibt False zurück. Für groß-/kleinschreibungsunabhängige Prüfungen konvertieren Sie beide Zeichenfolgen in denselben Fall: "hello".lower() in "Hello, World!".lower().

Was ist der Leistungsunterschied zwischen der Prüfung von 'in' in einer Liste vs. einer Menge?

Die Prüfung der Mitgliedschaft in einer Liste hat eine Zeitkomplexität von O(n) (lineare Suche), während die Prüfung in einer Menge eine durchschnittliche Zeitkomplexität von O(1) hat (Hash-basierte Suche). Für häufige Mitgliedschaftstests in großen Sammlungen verwenden Sie Mengen für bessere Leistung.

Kann ich 'in' mit benutzerdefinierten Klassen verwenden?

Ja, Sie können benutzerdefinierte Klassen mit dem in-Operator arbeiten lassen, indem Sie die Methode __contains__() implementieren. Wenn Ihre Klasse iterierbar ist (implementiert __iter__()), wird Python auf die Iteration zurückgreifen, wenn __contains__() nicht definiert ist.

Was ist der Unterschied zwischen 'in' und 'not in'?

Der in-Operator gibt True zurück, wenn ein Wert in einer Sammlung gefunden wird, während not in True zurückgibt, wenn ein Wertnicht gefunden wird. not in ist äquivalent zu not (value in collection).