So prüfen Sie schnell, ob ein Wert in der Python-Liste existiert
-
in
Methode zur Überprüfung der Existenz des Wertes in der Python-Liste - Liste in Set konvertieren und dann die Mitgliedschaftsprüfung in Python durchführen
- Performance-Vergleich zwischen List- und Set-Mitgliedschaftsprüfung
Wir werden verschiedene Methoden vorstellen, um zu prüfen, ob ein Wert in der Python-Liste vorhanden ist, und anschließend ihre Performance zu vergleichen.
Die Methoden umfassen,
- Methode zur Überprüfung der Mitgliedschaft -
in
Methode um zu prüfen, ob der Wert existiert - Liste in
set
konvertieren und dann die Mitgliedschaftsprüfungsmethodein
verwenden
in
Methode zur Überprüfung der Existenz des Wertes in der Python-Liste
in
ist der richtige Weg, die Mitgliedschaft in Python-Liste, Set, Dictionary oder anderen iterierbaren Python-Objekten zu überprüfen.
>>> testList = [1, 2, 3, 4]
>>> 2 in testList
True
>>> 6 in testList
False
Liste in Set konvertieren und dann die Mitgliedschaftsprüfung in Python durchführen
Die Mitgliedschaftsprüfung in der Liste könnte ineffizient sein, wenn die Listengröße zunimmt, insbesondere wenn doppelte Elemente in der Liste vorhanden sind.
Python-Set ist in diesem Szenario ein besserer Datentyp für die Mitgliedschaftsprüfung, da er nur eindeutige Werte enthält.
Performance-Vergleich zwischen List- und Set-Mitgliedschaftsprüfung
Wir werden die Leistungsunterschiede in vier Situationen vergleichen,
- Die ursprüngliche Liste hat eindeutige Werte, und der geprüfte Wert ist in der Liste vorhanden
- Die ursprüngliche Liste hat eindeutige Werte, und der geprüfte Wert existiert nicht in der Liste.
- Die ursprüngliche Liste hat doppelte Werte, und der geprüfte Wert ist in der Liste vorhanden
- Die ursprüngliche Liste hat nur doppelte Werte, und der geprüfte Wert existiert nicht in der Liste.
Die ursprüngliche Liste hat nur eindeutige Werte, und der geprüfte Wert existiert in der Liste
from itertools import chain
import perfplot
import numpy as np
def setupTest(n):
a = np.arange(n)
np.random.shuffle(a)
randomlist = a[: n // 2].tolist()
randomvalue = randomlist[len(randomlist) // 2]
return [randomlist, randomvalue]
def inListMethod(L):
x, y = L
return y in x
def inSetMethod(L):
x, y = L
x = set(x)
return y in x
perfplot.show(
setup=setupTest,
kernels=[inListMethod, inSetMethod],
labels=["in list", "in set"],
n_range=[2 ** k for k in range(1, 20)],
xlabel="Data Length",
title="unique values in list and to-be-checked value exists in the list",
logx=True,
logy=True,
)
Die ursprüngliche Liste hat nur eindeutige Werte, und der geprüfte Wert existiert nicht in der Liste
from itertools import chain
import perfplot
import numpy as np
def setupTest(n):
a = np.arange(n)
np.random.shuffle(a)
randomlist = a[: n // 2].tolist()
randomvalue = n + 1
return [randomlist, randomvalue]
def inListMethod(L):
x, y = L
return y in x
def inSetMethod(L):
x, y = L
x = set(x)
return y in x
perfplot.show(
setup=setupTest,
kernels=[inListMethod, inSetMethod],
labels=["in list", "in set"],
n_range=[2 ** k for k in range(1, 20)],
xlabel="Data Length",
title="unique values in list and to-be-checked value does not exist in the list",
logx=True,
logy=True,
)
Die ursprüngliche Liste hat doppelte Werte, und der geprüfte Wert existiert in der Liste
from itertools import chain
import perfplot
import numpy as np
def setupTest(n):
a = np.arange(n)
np.random.shuffle(a)
randomlist = np.random.choice(n, n // 2).tolist()
randomvalue = randomlist[len(randomlist) // 2]
return [randomlist, randomvalue]
def inListMethod(L):
x, y = L
return y in x
def inSetMethod(L):
x, y = L
x = set(x)
return y in x
perfplot.show(
setup=setupTest,
kernels=[inListMethod, inSetMethod],
labels=["in list", "in set"],
n_range=[2 ** k for k in range(2, 20)],
xlabel="Data Length",
title="duplicate values in list and to-be-checked value exists in the list",
logx=True,
logy=True,
)
Die ursprüngliche Liste hat nur doppelte Werte, und der geprüfte Wert existiert nicht in der Liste
from itertools import chain
import perfplot
import numpy as np
def setupTest(n):
a = np.arange(n)
np.random.shuffle(a)
randomlist = np.random.choice(n, n // 2).tolist()
randomvalue = n + 1
return [randomlist, randomvalue]
def inListMethod(L):
x, y = L
return y in x
def inSetMethod(L):
x, y = L
x = set(x)
return y in x
perfplot.show(
setup=setupTest,
kernels=[inListMethod, inSetMethod],
labels=["in list", "in set"],
n_range=[2 ** k for k in range(2, 20)],
xlabel="Data Length",
title="duplicate values in list and to-be-checked value does not exist in the list",
logx=True,
logy=True,
)
Schlussfolgerung des Leistungsvergleichs
Obwohl die Mitgliedschaftsprüfung in Python set
schneller ist als die in Python list, ist die Konvertierung von list oder set
zeitaufwendig. Wenn es sich bei den angegebenen Daten um Python-Listen handelt, hat es daher keine Performance-Vorteile, wenn Sie die Liste zuerst in set
konvertieren und dann die Mitgliedschaftsprüfung in set
durchführen.
from itertools import chain
import perfplot
import numpy as np
def setupTest(n):
a = np.arange(n)
np.random.shuffle(a)
unique_randomlist = a[: n // 2].tolist()
duplicate_randomlist = np.random.choice(n, n // 2).tolist()
existing_randomvalue = unique_randomlist[len(unique_randomlist) // 2]
nonexisting_randomvalue = n + 1
return [
unique_randomlist,
duplicate_randomlist,
existing_randomvalue,
nonexisting_randomvalue,
]
def inListMethod_UniqueValue_ValueExisting(L):
u, d, ex, ne = L
return ex in u
def inListMethod_DuplicateValue_ValueExisting(L):
u, d, ex, ne = L
return ex in d
def inListMethod_UniqueValue_ValueNotExisting(L):
u, d, ex, ne = L
return ne in u
def inListMethod_DuplicateValue_ValueNotExisting(L):
u, d, ex, ne = L
return ne in d
def inSetMethod_UniqueValue_ValueExisting(L):
u, d, ex, ne = L
u = set(u)
return ex in u
def inSetMethod_DuplicateValue_ValueExisting(L):
u, d, ex, ne = L
d = set(d)
return ex in d
def inSetMethod_UniqueValue_ValueNotExisting(L):
u, d, ex, ne = L
u = set(u)
return ne in u
def inSetMethod_DuplicateValue_ValueNotExisting(L):
u, d, ex, ne = L
d = set(d)
return ne in d
perfplot.show(
setup=setupTest,
equality_check=None,
kernels=[
inListMethod_UniqueValue_ValueExisting,
inListMethod_DuplicateValue_ValueExisting,
inListMethod_UniqueValue_ValueNotExisting,
inListMethod_DuplicateValue_ValueNotExisting,
inSetMethod_UniqueValue_ValueExisting,
inSetMethod_DuplicateValue_ValueExisting,
inSetMethod_UniqueValue_ValueNotExisting,
inSetMethod_DuplicateValue_ValueNotExisting,
],
labels=[
"inListMethod_UniqueValue_ValueExisting",
"inListMethod_DuplicateValue_ValueExisting",
"inListMethod_UniqueValue_ValueNotExisting",
"inListMethod_DuplicateValue_ValueNotExisting",
"inSetMethod_UniqueValue_ValueExisting",
"inSetMethod_DuplicateValue_ValueExisting",
"inSetMethod_UniqueValue_ValueNotExisting",
"inSetMethod_DuplicateValue_ValueNotExisting",
],
n_range=[2 ** k for k in range(2, 20)],
xlabel="Data Length",
logx=True,
logy=True,
)
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookVerwandter Artikel - Python List
- Alle Vorkommen eines Elements aus einer Liste in Python entfernen
- Konvertieren eines Dictionaries in eine Liste in Python
- Duplikate aus Liste entfernen in Python
- Wie erhält man den Durchschnitt einer Liste in Python
- Was ist der Unterschied zwischen den Listenmethoden append und extend
- Wie man eine Liste in Python in eine Zeichenkette konvertiert