Die in
Python integrierte Funktion filter() wird zum Filtern von Sequenzen verwendet.
Ähnlich wie map() akzeptiert auch filter() eine Funktion und eine Sequenz. Anders als map() wendet filter() die übergebene Funktion der Reihe nach auf jedes Element an und entscheidet dann, ob das Element beibehalten oder verworfen werden soll, basierend darauf, ob der Rückgabewert True oder ist FALSCH.
Um beispielsweise in einer Liste gerade Zahlen zu löschen und nur ungerade Zahlen beizubehalten, können Sie so schreiben:
def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) # 结果: [1, 5, 9, 15]
Um leere Zeichenfolgen in einer Sequenz zu löschen, können Sie so schreiben:
def not_empty(s): return s and s.strip() list(filter(not_empty, ['A', '', 'B', None, 'C', ' '])) # 结果: ['A', 'B', 'C']
Es ist ersichtlich, dass der Schlüssel zur Verwendung der höherwertigen Funktion filter() darin besteht, eine „Filter“-Funktion korrekt zu implementieren.
Beachten Sie, dass die Funktion filter() einen Iterator zurückgibt, was eine Lazy-Sequenz ist, daher müssen wir filter() erzwingen Vervollständigen Sie die Berechnung. Als Ergebnis müssen Sie die Funktion list() verwenden, um alle Ergebnisse zu erhalten und list zurückzugeben.
Verwenden Sie Filter, um Primzahlen zu finden
Eine Möglichkeit, Primzahlen zu berechnen, ist die Ehrlich-Sieb-Methode. Ihr Algorithmus ist sehr einfach zu verstehen:
Listen Sie zunächst alle natürlichen Zahlen beginnend bei 2 auf und konstruieren Sie eine Folge:
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 , 14, 15, 16, 17, 18, 19, 20, ...
Nehmen Sie die erste Zahl 2 in der Folge, die eine Primzahl sein muss, und verwenden Sie dann 2, um die Vielfachen von herauszufiltern 2 in der Reihenfolge:
3,4, 5,6, 7,8, 9,10, 11,12, 13,14, 15,16, 17,18, 19,20, ...
Neu erhalten Die erste Zahl in der Folge ist 3, die eine Primzahl sein muss. Verwenden Sie dann 3, um die Vielfachen von 3 in der Folge herauszufiltern:
5,6, 7, 8,9,10, 11,12, 13,14, 15,16, 17,18, 19,20, ...
Nehmen Sie die erste Zahl 5 der neuen Folge und verwenden Sie dann 5 bis Filtern Sie die Vielfachen von 5 in der Reihenfolge heraus:
7,8,9,10, 11,12, 13,14,15,16, 17,18, 19,20, ...
Durch kontinuierliches Sieben erhalten Sie alle Primzahlen.
Um diesen Algorithmus in Python zu implementieren, können Sie zunächst eine ungerade Sequenz beginnend mit 3 konstruieren:
def _odd_iter(): n = 1 while True: n = n + 2 yield n
Beachten Sie, dass dies ein Generator und eine unendliche Sequenz ist.
Dann definieren Sie eine Filterfunktion:
def _not_divisible(n): return lambda x: x % n > 0
Abschließend definieren Sie einen Generator, der kontinuierlich die nächste Primzahl zurückgibt:
def primes(): yield 2 it = _odd_iter() # 初始序列 while True: n = next(it) # 返回序列的第一个数 yield n it = filter(_not_divisible(n), it) # 构造新序列
Dieser Generator gibt zuerst die erste Primzahl 2 zurück, dann Verwenden Sie filter(), um kontinuierlich neue gefilterte Sequenzen zu generieren.
Da primes() auch eine unendliche Folge ist, müssen Sie beim Aufruf eine Bedingung festlegen, um die Schleife zu verlassen:
# 打印1000以内的素数: for n in primes(): if n < 1000: print(n) else: break
Beachten Sie, dass Iterator eine Folge verzögerter Berechnungen ist, die wir verwenden können Python drückt „alle natürlichen Zahlen“, „alle Primzahlen“ und andere Folgen aus, und der Code ist sehr prägnant
Das obige ist der detaillierte Inhalt vonVerstehen Sie die Verwendung von Filtern in einem Artikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!